2016-05-20 12 views
2

Zurzeit wird ein Testentwicklerkonto für Sabre Dev Studio verwendet und versucht, deren REST Api - Instaflights_Search zu verwenden.HTTP/1.1 400 Ungültige Anforderung Sabre REST Api

Ich erstelle die Authentifizierung und bekomme ein Zugriffs-Token gut, aber das Problem entsteht, wenn ich versuche, eine Anfrage zu senden. Ich erstelle die Header mit curl und php.

function callRestApi($url,$access_token) { 

    $ch = curl_init(); 

    $header = array(); 
    $header[] = "Authorization: Bearer " .$access_token; 
    $header[] = "Accept: application/json"; 
    $header[] = 'Content-Type: application/json'; 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($ch, CURLOPT_HTTPGET, 1); 
    curl_setopt($ch, CURLOPT_VERBOSE, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $result = curl_exec($ch); 
    curl_close($ch); 
    return json_decode($result,true); 
} 


$url = "https://api.test.sabre.com/v1/shop/flights?origin=JFK&destination=LAX&departuredate=2016-05-30&returndate=2016-05-31"; 

$access_token = callForToken(); 

$server_response = callRestApi($url,$access_token); 

Die Saber Antwort ist:

array(5) { 
    ["status"]=> 
    string(12) "NotProcessed" 
    ["type"]=> 
    string(10) "Validation" 
    ["errorCode"]=> 
    string(30) "ERR.2SG.CLIENT.INVALID_REQUEST" 
    ["timeStamp"]=> 
    string(29) "2016-05-19T22:36:51.041-05:00" 
    ["message"]=> 
    string(60) "Request is invalid: The request should have the JSON payload" 
    } 

und der HTTP-Request-Header 1/1 lautet:

* Hostname was found in DNS cache 
* Trying 151.193.52.94... 
* Connected to api.test.sabre.com (151.193.52.94) port 443 (#0) 
* successfully set certificate verify locations: 
* CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none 
* SSL connection using TLSv1.2/AES256-SHA 
* Server certificate: 
* subject: C=US; ST=Texas; L=Southlake; O=Sabre, Inc.; OU=Internet Services; CN=api.test.sabre.com 
* start date: 2015-02-25 00:00:00 GMT 
* expire date: 2017-03-21 23:59:59 GMT 
* subjectAltName: api.test.sabre.com matched 
* issuer: C=US; O=Symantec Corporation; OU=Symantec Trust Network; CN=Symantec Class 3 Secure Server CA - G4 
* SSL certificate verify ok. 
    > GET /v1/shop/flights?origin=JFK&destination=LAX&departuredate=2016-05-30&returndate=2016-05-05&onlineitinerariesonly=n&limit=10&offset=1&eticketsonly=n&sortby=totalfare&order=asc&sortby2=departuretime&order2=asc&pointofsalecountry=US HTTP/1.1 
Host: api.test.sabre.com 
Authorization: Bearer T1FNEWIhYyxjzQJ/Fh4oPfgkjU4s+R/xAxglSqD2oC4kYcCAnPcIv+bbV9sTu3KHxdpQ+zRKUsTGmpfhQT//Djx+3yDNZUcypKrbjzIzjVJvDPI+PyH5bT4F88Gcse//7hjcrz5sCRXkqwqjb1ceaBhGV2hr0t47XwBcjEvPg2I92FtFsqNw7V8NrcPfBVFxnZAbqESJ+zUQH6mSeaWa1h3Rc04g4szipQhHWDnR+sneH8ePdHKPQaoX3M44YMRvviOV8yEBYwTg** 
Accept: application/json 
Content-Type: application/json 

< HTTP/1.1 400 Bad Request 
< Date: Fri, 20 May 2016 03:15:28 GMT 
< Content-Type: application/json 
< Content-Length: 207 
< 
* Connection #0 to host api.test.sabre.com left intact 

Irgendwelche Ideen, was das Problem mit dem Header sein könnte?

EDIT am 23/05/2016 Korrigierte Version für den Aufbau des Request-Header unter:

 function callRestApi($url,$access_token) { 

     $header2 = array(
     'Authorization : Bearer '.$access_token, 
     'Accept : */*' 
    ); 

     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
     curl_setopt($ch, CURLOPT_VERBOSE, true); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, $header2); 
     $result = curl_exec($ch); 
     curl_close($ch); 
     return json_decode($result,true); 
    } 
+1

Haben Sie versucht, die Anfrage mit einer anderen Methode/Programm/Framework zu machen, nur um zu überprüfen, ob die Anfrage in Ordnung ist? Vielleicht mit Postboten oder so etwas zu versuchen ... kam hier von DevRant haha ​​ – PekosoG

+0

devRant macht die Welt zu einem besseren Ort ein verärgertes Geschwätz zu einer Zeit :) Vielen Dank für den Vorschlag, ich werde das versuchen und lassen Sie wissen, wie es geht geht! –

Antwort

1

haben Sie im pHP-Beispielcode von Saber gitHub Repo

https://github.com/SabreDevStudio/SACS-Php

sah?

es IntaFlights und curl verwenden, so vielleicht ist es eine Annäherung an die liefert API, die Sie testen, und Ihre Umgebung

Fühlen Sie sich frei, ein Problem hinzuzufügen, wenn es nicht für Sie arbeitet.

+0

Danke, dass Sie mich zu ihrem Github-Projekt geführt haben. Ich war in der Lage, die Funktion zu verwenden, wo sie ihren Header erstellten und das Problem scheint mit meinem curl_setopt gewesen zu sein. Ich habe die korrigierte Version in der ursprünglichen Frage für jeden Interessierten veröffentlicht. Danke nochmal! –

0

Nun merke ich, zwei Dinge von der Fledermaus, die Sie in die richtige Richtung zeigen kann:

  1. Die Fehlermeldung in der Sabre-Antwort erwähnt, dass eine JSON-Nutzlast fehlt. Möchten Sie Daten im Rahmen Ihrer Anfrage absichtlich auslassen? (Einige Dienste sind schlecht geschrieben und erwarten eine Stelle, auch wenn sie leer ist ("{}").)
  2. Vielleicht ist ihre API kaputt? Wenn Sie sich die HTTP-Anfrage (in Ihrem zweiten Block) ansehen, bemerken Sie, wie sich die URL geändert hat? Die angegebene Rückgabedatumsvariable ist nicht einmal gültig (Sie haben "2016-05-31" angegeben und sie wurde geändert (automatische Weiterleitung?) Zu "2016-05-315". Das heißt, es sei denn, Sie haben zwei unterschiedliche Anforderungen kopiert/eingefügt.

Hoffnung, das hilft.

+0

1, Daten nicht bewusst auslassen. Stellen Sie sicher, dass alle erforderlichen Felder enthalten sind, sodass ich mir nicht sicher bin, warum die JSON-Nutzdaten fehlende Antworten erhalten. 2. Entschuldigung, das Datum Problem war ein Tippfehler von Copy & Paste, habe nicht bemerkt, dass es in meinem Beitrag war, bis Sie darauf hingewiesen. (Bearbeiten Sie den Post auch, um ihn zu entfernen, um niemanden zu verwechseln.) Die API scheint größtenteils nicht kaputt zu sein, da sie auf ihren Testservern und in den Apps in ihrer Demo-Galerie funktioniert. Nochmals vielen Dank, dass Sie sich die Zeit genommen haben, zu antworten! –

+0

Gotcha. In diesem Fall würde ich dasselbe wie Pekoso oben vorschlagen - versuchen Sie, die Anfrage in einem anderen Tool (z.Postbote), und sehen Sie, ob Sie das gleiche Problem erfahren. – Martin

Verwandte Themen