2017-02-16 157 views
2

我试图发送一个GET请求,思科ISE,但得到这个错误:415不支持的媒体类型HTTP

415 Unsupported Media Typen

我在做什么错?该API文档说:

Method: GET

URI: https://10.10.10.10:9060/ers/config/networkdevice/

HTTP 'Accept' header:application/vnd.com.cisco.ise.network.networkdevice.1.0+xml

所以,我应该能够接收数据的XML。

我已经尝试过这样做:

$header->header(
    'Content-Type'=>'application/vnd.com.cisco.ise.network.networkdevice.xml'); 
$header->header(
    'Content-Type'=>'application/vnd.com.cisco.ise.network.networkdevice.1.0+xml'); 

没有什么工作..每一次我得到上述错误。

这是我的完整代码。

use strict; 
use warnings; 
use JSON -support_by_pp; 
use LWP 5.64; 
use LWP::UserAgent; 
use MIME::Base64; 
use REST::Client; 
use IO::Socket::SSL; 
use HTTP::Headers; 

#So dass es auch ohne SSL Sertifizierung funktioniert 
BEGIN { $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0 } 
#Create a user agent object 
my $ua = LWP::UserAgent->new(ssl_opts=> { 
SSL_verify_mode => SSL_VERIFY_NONE(), 
verify_hostname => 0, 
               } 
             ); 

#Create a request 
my $uri='https://10.10.10.10:9060/ers/config/networkdevice'; 
my $header = HTTP::Headers->new; 
$header->header('Content-Type'=>'application/vnd.com.cisco.ise.network.networkdevice'); 
my $req = HTTP::Request->new('GET', $uri, $header); 
$req-> authorization_basic("user", "user"); 

#Pass request to the user agent and get a response back 
my $res = $ua->request($req); 

#Check the outcome of the response 
if ($res->is_success) { 
    print $res->content; 
} else { 
    print $res->status_line, "n"; 
} 
+0

似乎它不同意媒体类型。 – 2017-02-16 13:34:16

+1

文档说你需要一个'Accept'头,但是你发送了一个'Content-Type'。这是错误的标题。写一个答案。 – simbabque

回答

2

您的文档说您应该发送一个Accept标题与该长类型。

HTTP 'Accept' header:application/vnd.com.cisco.ise.network.networkdevice.1.0+xml

Accept是内容类型,你的客户端将在响应接受。但是,您正在使用它作为GET请求中的Content-Type标题。这没有意义,因为GET请求没有主体。因此,它没有内容,并且不能为其内容输入类型。

API响应415 Unsupported Media Type的事实有点奇怪。它也可以忽略这一点。我们无法知道为什么开发人员选择这样做。

要解决您的问题,请将您的请求更改为使用Accept标题而不是Content-Type

my $header = HTTP::Headers->new; 
$header->header(Accept => 'application/vnd.com.cisco.ise.network.networkdevice.1.0+xml'); 
my $req = HTTP::Request->new('GET', $uri, $header); 

请注意,您不必明确创建自己的HTTP :: Headers对象。对于这个简单的请求,你可以传递一个带有键/值对的数组ref给HTTP::Request->new

my $req = HTTP::Request->new(
    'GET', 
    $uri, 
    [ Accept =>'application/vnd.com.cisco.ise.network.networkdevice.1.0+xml' ], 
); 
+0

似乎一切都处于显着的位置,但不幸的是我有同样的错误...... 接受不是颜色...我需要安装一些模块吗? – StayCalm

+0

@StayCalm你可以添加请求转储到你的问题吗?你可以做'print $ req-> as_string'。在将其发布到此处之前,只需将输出中的基本身份验证数据和其他任何敏感的东西替换为输出中的虚假内容。 – simbabque

+0

'GET https://10.10.10.10:9060/ers/config/networkdevice Accept:application/vnd.com.cisco.ise.network.networkdevice + xml 授权:基本dXNlcjp1c2Vy ' – StayCalm

0

更正代码

#Create a request 
my $uri='https://10.10.10.10:9060/ers/config/networkdevice'; 

my $req = HTTP::Request->new('GET', $uri); 

$req->header('Accept'=>'application/vnd.com.cisco.ise.network.networkdevice.1.0+xml'); 

$req->authorization_basic("user", "user"); 

#Pass request to the user agent and get a response back 
my $res = $ua->request($req); 

你要发送接受头不的Content-Type

相关问题