415 不支持的媒体类型 HTTP
415 Unsupported Media Type HTTP
我正在尝试向 Cisco ISE 发送 GET 请求,但收到此错误:
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";
}
你的文档说你应该发送一个 Accept
header 那个 long 类型。
HTTP 'Accept' header:application/vnd.com.cisco.ise.network.networkdevice.1.0+xml
Accept
是您的客户将在响应中接受的内容类型。但是您在 GET 请求中将其用作 Content-Type
header 。这没有意义,因为 GET 请求没有 body。因此,它没有内容,也不能为其内容指定类型。
API 以 415 Unsupported Media Type 响应这一事实有点奇怪。它也可以忽略它。我们无法知道开发人员为什么选择这样做。
要解决您的问题,请将您的请求更改为使用 Accept
header 而不是 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 object。对于这个简单的请求,您可以将带有 key/value 对的数组引用传递给 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);
您必须发送 接受 header 而不是 Content-Type.
我正在尝试向 Cisco ISE 发送 GET 请求,但收到此错误:
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";
}
你的文档说你应该发送一个 Accept
header 那个 long 类型。
HTTP 'Accept' header:application/vnd.com.cisco.ise.network.networkdevice.1.0+xml
Accept
是您的客户将在响应中接受的内容类型。但是您在 GET 请求中将其用作 Content-Type
header 。这没有意义,因为 GET 请求没有 body。因此,它没有内容,也不能为其内容指定类型。
API 以 415 Unsupported Media Type 响应这一事实有点奇怪。它也可以忽略它。我们无法知道开发人员为什么选择这样做。
要解决您的问题,请将您的请求更改为使用 Accept
header 而不是 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 object。对于这个简单的请求,您可以将带有 key/value 对的数组引用传递给 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);
您必须发送 接受 header 而不是 Content-Type.