проблема snoopy / curl с API карт Google

Это связано с отладкой ошибки запроса API карт Google

Мы используем snoopy для выполнения запроса, и он возвращает проблему «датчик должен быть верным или ложным».

Сгенерированный snoopy запрос:

/ usr / bin / curl -k -D "/ tmp / snodlRoAD" -H "User-Agent: Snoopy v1.2.4" -H "Host: maps.googleapis.com:443" -H "Accept: image / gif, image / x-xbitmap, image / jpeg, image / pjpeg, / "-H" Content-type: application / x-www-form-urlencoded "-H" Content-length: 122 "- d "address = {закодированный адрес} & sensor = false & key = {apikey} &" "https://maps.googleapis.com/maps/api/geocode/json "

Если я запрошу вручную [в соответствии с известными проблемами]

curl "https://maps.googleapis.com/maps/api/geocode/json?address= {кодированный адрес} & sensor = false & key = {apikey} & "

оно работает.

Но как исправить сгенерированную snoopy командную строку. У меня есть доступ к исходному коду, чтобы исправить проблему, если я могу заставить работать отформатированный запрос snoopy.

Я тоже писал в группу Snoopy, но она не очень активна.


person Ian M    schedule 10.04.2014    source источник


Ответы (1)


В сгенерированном snoopy curl он выполняет операцию http POST (для использования параметра -d). Тогда как в вашей рабочей команде curl вы используете http GET. Вот почему один работает на вас, а другой - нет.

Поскольку у вас есть доступ к исходному коду, удалите параметр -d из команды. И добавьте значение -d в конце URL-адреса после знака ?. Прямо как ваш рабочий.

"https://maps.googleapis.com/maps/api/geocode/json?address={encoded address}&sensor=false&key={apikey}&"
person Sabuj Hassan    schedule 10.04.2014
comment
Я изменил Снупи с поста на получение. Вот результат и команда, которую он выполняет: / usr / bin / curl -k -D / tmp / snoSmiNbI -H User-Agent: Snoopy v1.2.4 -H Host: maps.googleapis.com:443 -H Accept: image / gif , изображение / x-xbitmap, изображение / jpeg, изображение / pjpeg, / maps.googleapis.com/maps/api/geocode/json \? address = {кодированный адрес} \ & sensor = false \ & key = {apikey} \ экранирование выполняется с помощью функции escapeshellcmd (), что настоятельно рекомендуется и встроен в snoopy, но похоже, что он перекодируется и передается в Google. Запрошенный URL ‹code› / maps / api / geocode / json% 5C? Address = ... не может быть найден - person Ian M; 10.04.2014
comment
Удалите \ из \? и \& в вашем URL. - person Sabuj Hassan; 10.04.2014
comment
Я не могу его удалить. Это из функции escapeshellcmd (), и это необходимо для безопасности. Тем не менее, кажется подозрительной ошибкой, заключающейся в том, что команда помещается в кавычки, и это приводит к дополнительному экранированию. Я удалил кавычки вокруг escapeshellcmd, и все готово. Итак, комбинация ошибки Snoopy и GET vs POST. - person Ian M; 10.04.2014
comment
Хм ... Тогда это проблема. Другое решение, если возможно заменить String, просто выполните замену String после операции escapeshellcmd. - person Sabuj Hassan; 10.04.2014