|   |   | 
| 
 | 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. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |