2017-02-16 15 views
2

Я пытаюсь отправить запрос GET на Cisco 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

Похоже, что он не согласен с типом СМИ. –

+1

Документы говорят, что вам нужен заголовок 'Accept', но вы отправляете' Content-Type'. Это неправильный заголовок. Написание ответа. – simbabque

ответ

2

Ваша документация говорит, что вы должны отправить Accept заголовок с этим длинным типом.

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

Accept тип контента (s), что ваш клиент будет принимать в ответ. Но вы используете это как заголовок Content-Type в своем запросе GET. Это не имеет смысла, потому что запрос GET не имеет тела. Следовательно, он не имеет содержимого и не может иметь тип для своего содержимого.

Тот факт, что API отвечает с 415 неподдерживаемым типом носителя, немного странный. Это также может просто игнорировать это. Мы не можем понять, почему разработчики решили это сделать.

Чтобы устранить проблему, измените свой запрос на использование заголовка 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'. Просто замените базовые данные auth и все остальное, чувствительное к чему-то фальшивому на выходе, прежде чем отправлять его здесь. – simbabque

+0

'GET https://10.10.10.10:9060/ers/config/networkdevice Accept: приложение/vnd.com.cisco.ise.network.networkdevice + XML Authorization: Basic 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); 

Вы должны отправить хедер Accept не Content-Type.

 Смежные вопросы

  • Нет связанных вопросов^_^