2017-02-16 6 views
2

Ich versuche, eine GET-Anforderung an Cisco ISE zu schicken, aber diese Fehlermeldung erhalten:415 Unsupported Media Type HTTP

415 Unsupported Media Typen

Was mache ich falsch? Die API Dokumentation sagt:

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

Also, ich sollte in der Lage sein, Daten als XML zu erhalten.

Ich habe bereits versucht, dies zu tun:

$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'); 

Nichts funktioniert .. jedesmal, wenn ich den obigen Fehler erhalten.

Hier ist mein voller Code.

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

Scheint, es ist nicht einig über den Medientyp. –

+1

Die Dokumentation sagt, dass Sie eine 'Accept' -Header benötigen, aber Sie senden einen' Content-Type'. Das ist der falsche Header. Eine Antwort schreiben. – simbabque

Antwort

2

Die Dokumentation sagt, Sie sollten einen Accept Header mit dem langen Typ senden.

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

Accept ist der Inhaltstyp (en), die Ihre Client in der Antwort akzeptiert. Aber Sie verwenden das als Content-Type Header in Ihrer GET-Anfrage. Dies macht keinen Sinn, da eine GET-Anfrage keinen Körper hat. Daher hat es keinen Inhalt und kann keinen Typ für seinen Inhalt haben.

Die Tatsache, dass die API mit einem 415 Nicht unterstützten Medientyp reagiert, ist ein bisschen seltsam. Es könnte das auch einfach ignorieren. Wir haben keine Möglichkeit zu wissen, warum die Entwickler das gewählt haben.

Um das Problem zu beheben, ändern Sie Ihre Anforderung, einen Accept Header anstelle von Content-Type zu verwenden.

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

Hinweis: Sie müssen nicht explizit Ihr eigenes HTTP :: Headers-Objekt erstellen. Für diese einfache Anfrage können Sie einen Array Ref mit Schlüssel/Wert-Paaren an HTTP::Request->new übergeben.

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

Scheint wie alles in einer prominenten Position ist, aber leider habe ich den gleichen Fehler ...... Akzeptieren ist keine Farbe ... Muss ich einige Module installieren? – StayCalm

+0

@StayCalm können Sie bitte einen Dump der Anfrage zu Ihrer Frage hinzufügen? Sie können 'drucken $ req-> as_string'. Ersetzen Sie einfach die grundlegenden Auth-Daten und alles andere, was mit etwas Falschem in der Ausgabe reagiert, bevor Sie es hier veröffentlichen. – simbabque

+0

'GET https://10.10.10.10:9060/ers/config/networkdevice Accept: application/vnd.com.cisco.ise.network.networkdevice + xml Authorization: Grund dXNlcjp1c2Vy ' – StayCalm

0

Corrected Code

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

Sie haben die Accept Header nicht Content-Type zu senden.

Verwandte Themen