2016-08-17 6 views
4

Meine URL ist:PHP curl schlecht Anfrage 400 - mapquest Geokodierung

http://www.mapquestapi.com/geocoding/v1/batch?key=dNBvDLtTx85L3akdg8vBoHQXrWpDJSEI&location=HEBRON,KY,US&location=CINCINNATI,KY,US&location=CINCINNATI,KY,US&location=BEDFORD PARK,IL,US&location=BEDFORD PARK,IL,US&location=HODGKINS,IL,US&location=HODGKINS,IL,US&location=HODGKINS,IL,US&location=BALDWIN PARK,CA,US&location=BALDWIN PARK,CA,US&location=BALDWIN PARK,CA,US&location=,,US 

Es ist lang, aber es sollte mit https://www.mapquestapi.com/geocoding/

Das Geheimnis entfaltet sich, wenn ich den folgenden PHP-Code-kompatibel sein:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt($ch, CURLOPT_URL, $urlForGeocode); 
curl_setopt($ch, CURLOPT_HTTPGET, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 


$return = curl_exec ($ch); 
curl_close ($ch); 
echo($return); 


$output = shell_exec('curl ' . $urlForGeocode); 
echo($output); 

Die Variable $urlEncode enthält den Wert der obigen URL. Die erste Ausgabe ist:

<html><body><b>Http/1.1 Bad Request</b></body> </html> 

Der Ausgang der zweiten Anforderung ist:

{ 
    "info": { 
     "statuscode": 400, 
     "copyright": { 
      "text": "\u00A9 2016 MapQuest, Inc.", 
      "imageUrl": "http://api.mqcdn.com/res/mqlogo.gif", 
      "imageAltText": "\u00A9 2016 MapQuest, Inc." 
     }, 
     "messages": ["no 'json' parameter found"] 
    }, 
    "options": { 
     "maxResults": -1, 
     "thumbMaps": true, 
     "ignoreLatLngInput": false 
    }, 
    "results": [{ 
     "providedLocation": {}, 
     "locations": [] 
    }] 
} 

Diese beiden unterschiedlichen cURL Anfragen im Grunde die gleiche Sache zurück. Wenn ich die cURL von meinem Terminal auf meinem lokalen Rechner starte, wird auch eine 400 zurückgegeben.

Wenn ich die URL in meinem Browser obwohl, bin ich nicht enttäuscht, und es gibt die Daten, die ich suche mit einem 200 Statuscode zurück.

Was ist ein Unterschied zwischen einer Browser-Anfrage und der cURL?

+3

Versuchen hinzufügen 'curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('Accept: application/json'));' In Chrome, öffnen Sie dev tools> Netzwerk, finden Sie die Anfrage und drücken Sie Kopieren als Curl und Sie können alle Einstellungen sehen, die es verwendet, um diese Anfrage zu machen, damit Sie vergleichen können. –

+1

Haben Sie versucht, die URL zu codieren, dh Leerzeichen in% 20 zu verwandeln? Um auch etwas anderes über eine Curl-Anfrage vs. Browser-Anfrage zu beantworten, ist der User-Agent. Haben Sie versucht, Ihren Browser-User-Agent zu crawlen? – chiliNUT

+0

ihr beide habt recht ... Riesiger Dank für die Kopie als Curl. Ich tat das, schaute auf die URL, und das einzige, was anders war, waren die Leerzeichen. Ich glaubte nicht, dass es nur die Plätze waren, also habe ich das nicht direkt auf der Fledermaus versucht. Nun, war es. Witzigerweise habe ich urlencode() und rawurlencode() beide ohne Ergebnisse ausprobiert. – stackOverFlew

Antwort

1

Wie @Matt der Ninja und @chiliNut vorgeschlagen, musste ich den Unterschied zwischen den beiden Anfragen betrachten.

Der einzige Unterschied war die Leerzeichen. Ich habe versucht, die urlencode() PHP-Funktion sowie die rawurlencode() PHP-Funktion ausgeführt, und das Ergebnis nicht betroffen.

Dies ist, was ich jetzt anstelle von URL-Codierung bin mit:

$urlForGeocodeURLEncoded = str_replace(' ', '%20', $urlForGeocode); 

enter image description here

0

Scheint ein Problem mit der Art zu sein, wie Sie die Variable $urlForGeocode setzen .. verwenden Sie ' oder "?

Es sollte der ehemalige sein.

Die zweite Anforderung schlägt fehl, da im Feld URL eine (Leerzeichen) vorhanden ist, die eine fehlerhafte Anforderung erzeugt.

+0

In Bezug auf die URL habe ich es als eine Zeichenfolge von '' umgeben. Ich glaube nicht, dass der zweite wegen des Platzes fehlschlägt. Der Speicherplatz ist erforderlich, um einen Befehl auszuführen (wenn Sie sich auf die Shell-Ausführung beziehen). – stackOverFlew