2017-02-16 213 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

相關問題