2016-06-21 12 views
2

Ich versuche, eine JSON-Antwort von einer curl GET-Anfrage zu bekommen, aber nicht in der Lage, es zur Arbeit zu bekommen. Ich habe mehrere Beispiele ausprobiert und bekomme nichts zurück. Das ist, was ich versuche:Probleme mit curl GET in PHP

$Url = "http://app.whistle.com/api/dogs/132376/dailies/16955&X-Whistle-AuthToken=xxxxxxxxxxxxxxxxxxxxxxxx"; 

$ch = curl_init($Url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
echo $result; 

Weiß jemand, warum das nicht funktioniert?

+1

Es gibt eine 401: nicht autorisiert. Ich denke, es gibt mehr zu der Authentifizierungsmethode, die Sie weitergeben müssen. – aynber

+1

Sie nehmen einfach Erfolg an. Nehmen Sie niemals Erfolg mit externen Ressourcen an. Nimm immer Versagen an, überprüfe auf Fehler und behandle den Erfolg als angenehme Überraschung. 'if ($ result === false) {die (curl_error ($ ch)); } '. Wenn curl_exec fehlschlägt, gibt es boolean false zurück, das als unsichtbare Zeichenfolge mit der Länge null zurückgibt. –

+0

Wirklich seltsam, es kommt in meinem Browser wie es ist. Ich habe es geschafft, das Token mit Charles Proxy aus einer iOS-App auf meinem Handy zu bekommen, habe aber keine Ahnung, warum es diese URL jemals in meinem Mac-Browser anzeigen ließ, wie es überhaupt ist (und noch immer). Offensichtlich gibt mir das einen Platz, um zu suchen. Vielen Dank. – nonlinearmind

Antwort

0

Die URL gibt einen HTTP 401-Status (nicht autorisiert) zurück. Dies bedeutet, dass die Authentifizierung fehlgeschlagen ist. Sie sollten Ihre Authentifizierungsparameter überprüfen. Überprüfen Sie, ob Sie den Benutzernamen und das Passwort festlegen müssen oder ob Ihr AuthToken gültig ist.

curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
0

Sie scheinen X-Whistle-AuthToken an die URL hinzuzufügen. Zuerst würde das gemacht werden, beginnend mit ?, da es der erste Parameter ist, nicht mit &.

Zweitens seit dieser X-Whistle-AuthToken beginnt mit einem X- Ich nehme an, dass es ein HTTP-Header ist, der als HTTP-Header mit CURL gesendet werden soll, nicht als HTTP-GET-Parameter. Sie müssen jedoch die entsprechende Dokumentation überprüfen, um sicherzustellen, wie die API Ihre Antwort erwartet.

So etwas wird wahrscheinlich funktionieren, wie es sollte:

$Url = "http://app.whistle.com/api/dogs/132376/dailies/16955"; 

$ch = curl_init($Url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Whistle-AuthToken: 214cca48930110a634cfc34fe9b4ee17")); 

$result = curl_exec($ch); 
if ($result === false){ die(curl_error($ch)); } 

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
var_dump($result); 

Last but not least:

Ändern Sie Ihre authToken. Sie haben gerade ein privates Token durchgesickert, das wahrscheinlich privat bleiben sollte.