Обработка UTF-8 в API матрицы расстояний - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь написать код VBA, который взаимодействует с API матрицы расстояния Google и возвращает мне расстояние между двумя точками. Проблема в том, что, когда я пытаюсь использовать латинские буквы (например, ã), он возвращает ошибку Invalid Destination:

    <status>INVALID_REQUEST</status>
    <error_message>Invalid request. Invalid 'destinations' parameter.</error_message>
</DistanceMatrixResponse>

URL, который я использую, это:

https://maps.googleapis.com/maps/api/distancematrix/xml?units=metric&origins=Fortaleza&destinations=São+Paulo&key=" & myAPIK

Ребята, знаете ли вы какой-нибудь способ обойти это?

Но когда я использую код UTF-8 вместо самого слова, он возвращает мне желаемое расстояние:

https://maps.googleapis.com/maps/api/distancematrix/xml?units=metric&origins=Fortaleza&destinations=S%C3%A3o+Paulo&key=" & myAPIK

Я также уже пытался поместить язык (pt-BR) в URL, но он не работал.

1 Ответ

0 голосов
/ 14 января 2020

Вы захотите посмотреть, как работает настоящая веб-страница.

Откройте веб-страницу в Chrome, затем просмотрите трафик запроса c в DevTools (F12), он будет находиться на вкладке сети.

Вам нужно будет найти запрос на боковой панели, поможет фильтрация по XHR.

Когда вы найдете сам запрос, он покажет вам, как он закодирован. , Маловероятно, что латиница является параметром кодировки передачи, и UTF-8, вероятно, фильтруется перед отправкой запроса через JavaScript нормализацию вашего ввода. Но если вы не изучите API в DevTools, вы не будете знать наверняка.

Также, если вы просто используете QueryString (он же часть параметра API в URL) для взаимодействия с API, существует urlencode вероятно происходит. Используя этот сайт , вы можете увидеть, как это работает с Сан-Паулу. И вам, вероятно, нужно «продезинфицировать» ваш ввод, используя функцию urlencode, прежде чем публиковать / получать API.

...