Имя: Пароль:
1C
1С v8
Ответ на HTTPЗапрос разный при отправке с разных серверов
0 Dirk Diggler
 
04.07.21
17:15
Есть конфигурация. В ней процедура, которая по разному работает, если конфигурацию запускать под разными серверами

Функция ПолучитьHTTPОтветPOST  (Сервер, АдресРесурса, СоответствиеЗаголовки, ТекстЗапроса, SSLСоединение ) экспорт
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса,СоответствиеЗаголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(ТекстЗапроса, кодировкаТекста.UTF8);
    Соединение = Новый HTTPСоединение(Сервер,,,,,25,?(SSLСоединение,Новый ЗащищенноеСоединениеOpenSSL, неопределено));
    Попытка
        Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
        СтруктураОтвета = Новый Структура;
        
        СтруктураОтвета.Вставить("КодСостояния", ответ.КодСостояния);
        СтруктураОтвета.Вставить("Заголовки", ответ.Заголовки);
        СтруктураОтвета.Вставить("ТелоКакСтрока", ответ.ПолучитьТелоКакСтроку() );
        СтруктураОтвета.Вставить("ТелоКакДвоичныеДанные", ответ.ПолучитьТелоКакДвоичныеДанные() );
    Исключение
        Описание = ОписаниеОшибки();
        СтруктураОтвета = Новый Структура;
        
        СтруктураОтвета.Вставить("КодСостояния", 520);
        СтруктураОтвета.Вставить("Заголовки", Неопределено);
        СтруктураОтвета.Вставить("ТелоКакСтрока", ОписаниеОшибки() );
        СтруктураОтвета.Вставить("ТелоКакДвоичныеДанные", Неопределено);
    КонецПопытки;
    возврат СтруктураОтвета;
КонецФункции

В 8.3.16.1148 - все ок. Рядом другой сервер, поновей - и если эту конфу развернуть там, то удаленный сервер возвращает код 400, мол типа JSON не могу разобрать(он передается в ТекстЗапроса). Мамой клянусь, он одинаковый.

Какие могут быть причины? Что попробовать?
1 Ёпрст
 
04.07.21
17:21
посмотреть все параметры вестимо, заголовки, например
2 Ёпрст
 
04.07.21
17:22
ну и сам json сравнить передаваемый и его кодировку
3 Dirk Diggler
 
04.07.21
17:22
(1) все один в один. конфигурация копируется путем всасывания dt, там нечему отличаться.
4 Dirk Diggler
 
04.07.21
17:22
(2) в нем только латиница. кодировка задается явным образом:

HTTPЗапрос.УстановитьТелоИзСтроки(ТекстЗапроса, кодировкаТекста.UTF8);
5 acht
 
04.07.21
17:22
(0) Третий параметр метода УстановитьТелоИзСтроки
6 acht
 
04.07.21
17:23
А вообще - берешь fiddler, смотришь что вылетает, что прилетает...
7 серый КТУЛХУ
 
04.07.21
17:27
в таких случаях очень частая причина - в разной интертрепации исполнителем пропущенных параметров. попробуй во всех(!) вызовах методов/процедур/функций/настроексоединений указать все параметры без пропусков.
8 Dirk Diggler
 
04.07.21
17:45
(6) Посмотрел. Разница только в строке Content-Length

http://joxi.ru/zANqwqRfjpM8V2

http://joxi.ru/12MJwJaHkV5wGA
9 Dirk Diggler
 
04.07.21
17:47
HTTPЗапрос.УстановитьТелоИзСтроки(ТекстЗапроса, кодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать) - заработало!
10 acht
 
04.07.21
17:48
(8) Ну вот эти три байта BOM и есть
11 Dirk Diggler
 
04.07.21
17:48
всех блрю за пмщщь
12 серый КТУЛХУ
 
04.07.21
19:15
(9): дык (7).
13 Garykom
 
гуру
04.07.21
19:39
срезаться на BOM это типовая ошибка
примерно как на неразрывном пробеле когда число в строку и число оказывается >=1000
14 серый КТУЛХУ
 
04.07.21
19:49
(13): а еще срезаться на не-указании "Content-Type" в надежде что адресат-исполнитель и так по дефолту узнает... сам на таком при работе с гугль-доками-драйвами об стену убивался...
Программист всегда исправляет последнюю ошибку.