|
http post запрос. Какая-то ерунда | ☑ | ||
---|---|---|---|---|
0
mr_K
26.01.21
✎
13:32
|
С каких-то "лохматых" годов, для HTTP запросов использовал WinHttp.WinHttpRequest.5.1
Все было отлично, все работало. Сейчас столкнулся с ситуацией, что в ответе, русские символы "закодированы". Разработчик сервиса, говорит что никакую кодировку явно не указывает, типа должно быть utf-8. Наверное. Делаю так: WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"utf-8"); WinHttp.SetTimeouts(60000, 60000, 60000, 60000); WinHttp.Open("POST", АдресСервера + АдресРесурса,0); WinHttp.SetRequestHeader("Accept-Language", "ru"); WinHttp.SetRequestHeader("Accept-Charset", "utf-8"); WinHttp.setRequestHeader("Content-Language", "ru"); WinHttp.setRequestHeader("Content-Charset", "utf-8"); WinHttp.setRequestHeader("Content-type", "application/json"); WinHttp.setRequestHeader("ApiToken", Токен); WinHttp.Send(СтрокаЗапроса); попробовал перейти на нативные методы 1С :) Делаю так: HTTPСоединение = Новый HTTPСоединение(АдресСервера); HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Accept-Charset", "utf-8"); HTTPЗапрос.Заголовки.Вставить("Content-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Content-Charset", "utf-8"); HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json"); HTTPЗапрос.Заголовки.Вставить("ApiToken", Токен); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса, КодировкаТекста.UTF8); Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); В результате в Ответ.ПолучитьТелоКакСтроку("UTF-8") - пустая строка. Тут два вопроса: 1. Что я делаю не так с HTTPСоединение. 2. Как бы мне кодировку победить в WinHttpRequest Заранее спасибо |
|||
1
ДенисЧ
26.01.21
✎
13:33
|
А если не указывать кодировку в ПолучитьТелоКакСтроку ?
В заголовках ответа что? |
|||
2
mr_K
26.01.21
✎
13:36
|
(1) В заголовках Ответа есть вот такое: "Transfer-Encoding" "chunked"
Ответ.ПолучитьТелоКакСтроку() -то же пустая строка |
|||
3
mr_K
26.01.21
✎
14:26
|
По поводу кодировки: декодер говорит, что исходная кодировка Utf-8, отображаемая Windows-1252. В таком варианте текст становится нормальной кириллицей
|
|||
4
mr_K
26.01.21
✎
15:39
|
Декодирую через COMОбъект("Adodb.Stream").
Пытаюсь подобрать исходную и новую кодировку. Ничего не подходит :) Хотя вот этот сайт https://2cyr.com/decode/?lang=ru подбирает несколько вариантов, при которых текст становится читаемым. Но и они не подходят... Прям бложек организовал :). Коллеги, может быть есть идеи, как эти кодировки побороть? |
|||
5
mr_K
26.01.21
✎
15:42
|
Кто сможет подсказать, как привести вот такую строку:
Соединение ÑланÑевое ÐÑ50, Ð Ñ25 Ð ÐÐÐ.711142.029 в нормальный кириллический вид? Ожидаю получить вот такое: Соединение фланцевое Ду50, Ру25 РДАМ.711142.029 |
|||
6
Cthulhu
26.01.21
✎
15:47
|
||||
7
Kassern
26.01.21
✎
15:50
|
поставь Fiddler и попробуй через него запрос прогнать, посмотри какой ответ будет и в какой кодировке
|
|||
8
mr_K
26.01.21
✎
15:52
|
(6) мммм...И?
Могу сказать, что коды КодСимвола() моих "кракозябр" лежат в районе 200. +/-. Коды кириллицы - 1000 с чем-то (7) через фидлер пускали на компе разработчика сервиса. Мы с ним и с сервисом в одной сетке находимся, так что не принципиально. Кодировка utf-8. Ответ приходит читаемый |
|||
9
Kassern
26.01.21
✎
16:01
|
(8) Заголовки один в один сделали? ресурс https?
|
|||
10
Kassern
26.01.21
✎
16:06
|
Вот тебе кусок кода с озоном, как пример пост запроса, может поможет)
Ресурс="api-seller.ozon.ru"; Заголовки=Новый Соответствие; Заголовки.Вставить("Content-Type", "application/json"); Заголовки.Вставить("Client-Id",ИДКлиента); Заголовки.Вставить("Api-Key",Ключ); ssl = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено ); Соединение=Новый HTTPСоединение("api-seller.ozon.ru",,,,,,ssl); Запрос=Новый HTTPЗапрос("/v2/posting/fbo/list",Заголовки); ЗаписьJSON=Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписьJSON.ЗаписатьНачалоОбъекта(); ЗаписьJSON.ЗаписатьИмяСвойства("dir"); ЗаписьJSON.ЗаписатьЗначение("asc"); ЗаписьJSON.ЗаписатьИмяСвойства("filter"); ЗаписьJSON.ЗаписатьНачалоОбъекта(); ЗаписьJSON.ЗаписатьИмяСвойства("since"); ЗаписьJSON.ЗаписатьЗначение(ДатаНачала); ЗаписьJSON.ЗаписатьИмяСвойства("to"); ЗаписьJSON.ЗаписатьЗначение(ДатаОкончания); ЗаписьJSON.ЗаписатьИмяСвойства("status"); ЗаписьJSON.ЗаписатьЗначение("delivered"); ЗаписьJSON.ЗаписатьКонецОбъекта(); ЗаписьJSON.ЗаписатьИмяСвойства("limit"); ЗаписьJSON.ЗаписатьЗначение(50); ЗаписьJSON.ЗаписатьИмяСвойства("offset"); ЗаписьJSON.ЗаписатьЗначение(0); ЗаписьJSON.ЗаписатьКонецОбъекта(); Результат=ЗаписьJSON.Закрыть(); Запрос.УстановитьТелоИзСтроки(Результат); Ответ=Соединение.ВызватьHTTPМетод("POST",Запрос); Поток=Ответ.ПолучитьТелоКакПоток(); ЧтениеJSON=Новый ЧтениеJSON; ЧтениеJSON.ОткрытьПоток(Поток); Соответствие=ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); Поток=Неопределено; Запрос=Неопределено; |
|||
11
mr_K
26.01.21
✎
16:08
|
ресурс просто http. Заголовки - в фидлере вообще только авторизацию и Content-type прописываешь и все ок.
(10) О, работе с телом как потоком не пробовал. Не знаю поможет ли, но в любом случае спасибо! |
|||
12
Kassern
26.01.21
✎
16:09
|
(11) убери лишние заголовки, оставь, которые в фидлере сканали
|
|||
13
mr_K
26.01.21
✎
16:16
|
(12) Что в лоб, что по лбу)))) Лишние заголовки были действительно лишними, но без них результат тот же.
Через поток - совсем никак. "Недопустимое состояние потока записи JSON" |
|||
14
Kassern
26.01.21
✎
16:17
|
(13) код ответа какой?
|
|||
15
mr_K
26.01.21
✎
16:21
|
Код состояния в Ответе - 307
|
|||
16
mr_K
26.01.21
✎
16:36
|
УРРААААА. Подобрал.)))
Всем спасибо! |
|||
17
Вафель
26.01.21
✎
17:16
|
дело было в БОМ?
|
|||
18
mr_K
26.01.21
✎
17:21
|
(17). Не, я с него начал эксперименты.
Кодировку ИЗ и В подобрал для Stream. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |