2016-12-19 5 views
0

Я пытаюсь использовать API Карт Google для получения местоположения, а затем соседних мест.Не удалось аутентифицировать запрос. Предоставление «подписи» недействительно для предоставленного идентификатора клиента. Java, Camel, API Карт Google, Подпись, Geocode

Я отправляю закодированный URL-адрес API, например, если я ищу «Лас-Вегас, штат Невада», URL-адрес, присланный API, составляет: https://maps.googleapis.com/maps/api/geocode/json?address=Las+Vegas%2C+Nevada&client=gme-XXXXXXXXXX&signature=xxxxxxxxxxxxx.

Здесь clientID является фиксированным и не изменяется, но подпись создается на основе адреса «Las + Vegas% 2C + Nevada» или любого другого.

Обратите внимание, что в URL-адресе ключевое слово, записанное как адрес, кодируется в кодировке UTF-8 (пробел заменен на «+» и запятой «% 2C»).

Однако URL-адрес, по которому API выполняет поиск после отправки запроса, составляет: https://maps.googleapis.com/maps/api/geocode/json?address=Las+Vegas,+Nevada&client=gme-XXXXXXXXXX&signature=zzzzzzzzzzzzz.

Обратите внимание, что пробелы по-прежнему кодируются как «+», но в этом URL есть запятая вместо «% 2C», что приводит к созданию другой сигнатуры, создаваемой API, поскольку подпись генерируется на основе адреса. Я получаю следующее сообщение об ошибке из-за этого:.

«Не удалось проверить подлинность запроса при условии„подпись“не является допустимым для предоставленного идентификатора клиента, или при условии,„клиент“не действует The. подпись была проверена по URL:/maps/api/geocode/json? address = Las + Vegas, + Nevada & clientID = gme-XXXXXXXXXX & signature = zzzzzzzzzzzzz. Если это не соответствует запрошенному URL-адресу, убедитесь, что ваш Правильный запрос - URL-адрес. Подробнее: developers.google.com/maps/documentation/business/webservices/auth "

Почему запятая не закодирована в URL-адресе, который использует API Карт?

И есть ли способ решить эту проблему?

ответ

0

Просто оберните каждый в В параметре ниже

URLEncoder.encode(VARIABLE_NAME, "UTF-8") 

это приведет к тому, что будет отправлено «URL безопасное»!

Пример:

URL url = new URL("https://maps.googleapis.com/maps/api/geocode/json?address=" + URLEncoder.encode("Las Vegas, Nevada", "UTF-8") + &client=gme-XXXXXXXXXX&signature=xxxxxxxxxxxxx"); 
Смежные вопросы