Мой URL:
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
Он длинный, но он должен соответствовать https://www.mapquestapi.com/geocoding/
Тайна разворачивается, когда я запускаю следующий код php:
$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);
Значение переменной $urlEncode
содержит значение url выше. Первый выход:
<html><body><b>Http/1.1 Bad Request</b></body> </html>
Выходной сигнал второго запроса:
{ "info": { "statuscode": 400, "copyright": { "text": "\u00A9 2016 MapQuest, Inc.", "imageUrl": "http://img.ruphp.com/php/mqlogo.gif", "imageAltText": "\u00A9 2016 MapQuest, Inc." }, "messages": ["no 'json' parameter found"] }, "options": { "maxResults": -1, "thumbMaps": true, "ignoreLatLngInput": false }, "results": [{ "providedLocation": {}, "locations": [] }] }
Эти два разных запроса cURL возвращают в основном то же самое. Когда я запускаю cURL с моего терминала на моей локальной машине, возвращается и 400.
Если я поместил URL-адрес в свой браузер, я не разочарован, и он возвращает данные, которые я ищу, с кодом состояния 200.
Чем отличается запрос на получение браузера и cURL?
Кажется, проблема $urlForGeocode
с тем, как вы устанавливаете переменную $urlForGeocode
.. используете ли вы '
или "
?
Он должен быть первым.
Второй запрос терпит неудачу, потому что есть (пробел) в поле URL, которое создает неверный запрос.
Подобно @Matt, предложенный ниндзя и @chiliNut, мне нужно было посмотреть на разницу между двумя запросами.
Единственное различие заключалось в пробелах. Я попытался запустить php-функцию urlencode()
а также функцию php rawurlencode()
и не повлиял на результат.
Это то, что я использую сейчас вместо кодировки url:
$urlForGeocodeURLEncoded = str_replace(' ', '%20', $urlForGeocode);