|
GET-запрос в 8.2 через WinHttp.WinHttpRequest.5.1. | ☑ | ||
---|---|---|---|---|
0
Vlad_1717
23.12.19
✎
12:41
|
Добрый день. коллеги. Настраиваю API с Яндекс.Доставка. Все запросы POST и PUT работают, а вот GET выдает ответ от сервера:
<html><body><h1>400 Bad request</h1> Your browser sent an invalid request. </body></html>. Косяк в том, что нужно в GET-запрос вставить авторизацию по токену, но ни через SetRequestHeader("Authorization", "OAuth " + token), ни через прямое указание токена в строке запроса: "?" + "OAuth=" + token получить верный ответ не получается. Метод в Яндекс.Доставке - "location" (определение полного адреса по строке, содержащей часть адреса). Эти же данные, забиваемые в Postman, дают верный ответ. |
|||
1
Garykom
гуру
23.12.19
✎
12:50
|
||||
2
Vlad_1717
23.12.19
✎
13:03
|
(1) Это старая версия документации. По ней я настраивал, а потом оп-ля... и всё поменяли.
Сейчас уже 3-я редакция: https://tech.yandex.ru/delivery-3/doc/dg/reference/get-location-docpage/ |
|||
3
Garykom
гуру
23.12.19
✎
13:57
|
(2) Тогда возьми cURL и проверь с ним, если все ок то это какая то трабла WinHttp.WinHttpRequest.5.1
|
|||
4
Vlad_1717
23.12.19
✎
15:16
|
(3) Честно говоря, с cURL-ом не сталкивался ранее. А вот POSTMAN запрос отрабатывает верно, а Fiddler выдает ту же ошибку, что и WinHttp.WinHttpRequest.5.1. А "трабла" означает отказ от WinHttp.WinHttpRequest.5.1? Тогда не выход....
|
|||
5
Garykom
гуру
23.12.19
✎
15:22
|
(4) Код покажи, скорее всего скосячил
|
|||
6
Vlad_1717
23.12.19
✎
15:28
|
(5) Конечно:
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"utf-8"); WinHttp.SetTimeouts(60000, 60000, 60000, 60000); token = "AgAAAAA1Zf1NAAXdyDRcIbXFMkuhsmB9GdSdaj0"; WinHttp.Open("GET", "https://api.delivery.yandex.ru/location?term=(Великие Луки)", 0); WinHttp.setRequestHeader("Content-Type", "application/json"); //WinHttp.SetRequestHeader("Authorization", "Token " + token); WinHttp.SetRequestHeader("Authorization", "OAuth " + token); //WinHttp.setRequestHeader("Authorization", "Bearer " + token); //WinHttp.setRequestHeader("Authorization", "OAuth oauth_token=" + token); WinHttp.Send(); WinHttp.WaitForResponse(); Ответ = WinHttp.ResponseText(); Закомментированные строки - варианты авторизации. Результат тот же. |
|||
7
Garykom
гуру
23.12.19
✎
15:33
|
(6) Гыгыгыгы
|
|||
8
e053nk
23.12.19
✎
15:38
|
Вставлю свое замечание.Может поможет.
Есть у меня сервис обмена с порталом автопроизводителя. Работает из под 8.2 обмен json файлами.Поэтому использую WinHttp.WinHttpRequest.5.1. Больше года работало все нормально (даже и не лазил в него) В ноябре встало колом. Увидел не сразу. Стал разбираться. Fiddler прогонял. На самом сайте пробный обмен -проходил отлично. Причину нашел,только изменить пока не могу. Причина -в кириллических символах в параметрах строки запроса Get. Т.е. если указать code="ЭЭ098" запрос возвращает ошибку, если указать code="098" - запрос проходит , но возвращает некорректные данные. Со службой тех.поддержки бьюсь 4 день -упорно мне доказывают, что у меня кодировка не верная. только до этого 1,5года работало без проблем, а сейчас перестала. ТАм еще есть сервисы подобные -я их сегодня тестить буду |
|||
9
e053nk
23.12.19
✎
15:40
|
О , увидел "Великие Луки" -вот как у меня.Пробуй забабахать что то английское.Пускай пустой ответ,но должно вернуть
|
|||
10
Garykom
гуру
23.12.19
✎
15:40
|
(8) +1 кодировка кириллицы в URL
Преобразуйте согласно WinHttp.Open("GET", "https://api.delivery.yandex.ru/location?term=(Великие%20Луки)%0A", 0); |
|||
11
Garykom
гуру
23.12.19
✎
15:41
|
(10) + движок форума испортиль
api.delivery.yandex.ru/location?term=(%D0%92%D0%B5%D0%BB%D0%B8%D0%BA%D0%B8%D0%B5%20%D0%9B%D1%83%D0%BA%D0%B8)%0A |
|||
12
Garykom
гуру
23.12.19
✎
15:42
|
||||
13
e053nk
23.12.19
✎
15:43
|
а вот как это преобразовать? У меня этих кодов может быть десятки тысяч блин.
Кодировка стоит utf-8. |
|||
14
Garykom
гуру
23.12.19
✎
15:43
|
||||
15
Garykom
гуру
23.12.19
✎
15:44
|
||||
16
Vlad_1717
23.12.19
✎
16:12
|
(15) Решил не заморачиваться с 2-мя словами, оставил только "Великие".
Вот такая строка в запросе: "https://api.delivery.yandex.ru/location?term=%C2%E5%EB%E8%EA%E8%E5" (надеюсь, верно перекодировал?) Ответ уже другой: {"message":"400: Unable to parse URI query","type":"UNKNOWN"} Перекодировщик отсюда: (15). А вот строка запроса из (11) отрабатывает норм! |
|||
17
e053nk
23.12.19
✎
16:13
|
Как я понял вместо "ЭЭ098" я должен послать подобное "%D0%92%D0%B5%D0%BB%D0%B8%D0%BA%D0%B8%D0%B5%20%D0%9B%D1....?
Вот когда это поменялось? работало какое то время и вот он нежданчик прилетел. |
|||
18
Garykom
гуру
23.12.19
✎
16:20
|
(16) Код перекодировщика скорее всего не тот.
Тебе надо не CP1251 а вероятно UTF8 взять исходную строку Великие Луки и далее URL encoding |
|||
19
Garykom
гуру
23.12.19
✎
16:23
|
||||
20
Garykom
гуру
23.12.19
✎
16:24
|
||||
21
Vlad_1717
23.12.19
✎
16:48
|
(20) Победил! Спасибо огромное!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |