Xml 415不支持的媒体类型HTTP

Xml 415不支持的媒体类型HTTP,xml,perl,http-status-code-415,Xml,Perl,Http Status Code 415,我正在尝试向Cisco ISE发送GET请求,但出现以下错误: 415不支持的媒体类型n 我做错了什么?API文档说明: 方法:获取 URI: HTTP“Accept”标题:application/vnd.com.cisco.ise.network.networkdevice.1.0+xml 因此,我应该能够以XML的形式接收数据 我已经尝试过这样做: $header->header( 'Content-Type'=>'application/vnd.com.cisco.is

我正在尝试向Cisco ISE发送GET请求,但出现以下错误:

415不支持的媒体类型n

我做错了什么?API文档说明:

方法:获取

URI:

HTTP“Accept”标题: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";
}

您的文档说明您应该发送一个带有该长类型的
Accept
标题

HTTP“Accept”标题:application/vnd.com.cisco.ise.network.networkdevice.1.0+xml

Accept
是客户端将在响应中接受的内容类型。但是您正在使用它作为GET请求中的
内容类型
头。这毫无意义,因为GET请求没有主体。因此,它没有内容,也不能有其内容的类型

API以415不支持的媒体类型响应的事实有点奇怪。它也可以忽略这一点。我们无法知道开发者为什么选择这样做

要解决问题,请将请求更改为使用
Accept
标题,而不是
内容类型

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' ],
);
修正码

#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);

您必须发送接受标题,而不是内容类型

似乎不同意媒体类型。文档说您需要
接受
标题,但您发送的是
内容类型
。那是错误的标题。写一个答案。似乎一切都在一个突出的位置,但不幸的是我有同样的错误。。。。。。接受不是彩色的…我需要安装一些模块吗?@StayCalm您能在您的问题中添加请求转储吗?您可以执行
print$req->as_string
。只需在输出中将基本身份验证数据和其他敏感数据替换为伪数据,然后再将其发布到此处。
GEThttps://10.10.10.10:9060/ers/config/networkdevice Accept:application/vnd.com.cisco.ise.network.networkdevice+xml授权:Basic dXNlcjp1c2Vy
是否与文档中的字符串完全相同@静养?我认为
1.0
缺失。我也不是从你的医生那里抄来的-/@注意细节总是很重要的。随着时间的推移,你会学到这一点。有时它是一个缺少的空格,或分号,或有一个换行符。在这种情况下,我要做的是将示例数据复制/粘贴到我拥有的代码上方,将它们对齐,并检查是否所有内容都匹配。