Некорректный HTTPОтвет
Вопрос является продолжением темы https://forum.infostart.ru/forum15/topic268216/
С криптографией разобрался. Теперь возник вопрос по поводу получения корректного ответа на запрос, отправленный из 1С.
Сам запрос формируется следующим образом
Если этот запрос отправлять через CURL или Postman, то возвращаемые данные нормально расшифровываются. Объем буфера двоичных данных, в обоих случаях, составляет 1280 байт. Ответ, получаемый на запрос, отправленный из 1С, составляет 1303 байта и выдает ошибку при раскодировании.
Сравнивал запросы, отправленные из Postman и 1С в Fidler-е. Единственное, при запросе из 1С, в методе CONNECT отсутствует заголовок Accept-Encoding, который есть в аналогичном запросе из Poastman-а. Однако, непосредственно в POST запросе этот заголовок есть у обоих (см. скрины). Размер тела ответа одинаковый.
Пробовал менять кодировку в строке но результата это не дало.
С криптографией разобрался. Теперь возник вопрос по поводу получения корректного ответа на запрос, отправленный из 1С.
Сам запрос формируется следующим образом
//===========================Отправка данных multipart/form-data=======================
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br");
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки,КодировкаТекста.ANSI);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""json""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку(КодированнаяСтрокаJSONДляОтправки);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""signature""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку(КодированнаяСтрокаСигнатуры);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary + "--");
ФайлОтправки.Закрыть();
Запрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере, Заголовки);
Запрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
//========================================================== ============================
Ответ = Соединение.ОтправитьДляОбработки(Запрос,"C:\Отдел разработки\ESD\БУКА\answer.txt");
//Ответ = Соединение.ОтправитьДляОбработки(Запрос).ПолучитьТелоКакДвоичныеДанные();
ПоказатьЕсли этот запрос отправлять через CURL или Postman, то возвращаемые данные нормально расшифровываются. Объем буфера двоичных данных, в обоих случаях, составляет 1280 байт. Ответ, получаемый на запрос, отправленный из 1С, составляет 1303 байта и выдает ошибку при раскодировании.
Сравнивал запросы, отправленные из Postman и 1С в Fidler-е. Единственное, при запросе из 1С, в методе CONNECT отсутствует заголовок Accept-Encoding, который есть в аналогичном запросе из Poastman-а. Однако, непосредственно в POST запросе этот заголовок есть у обоих (см. скрины). Размер тела ответа одинаковый.
Пробовал менять кодировку в строке
ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки,КодировкаТекста.ANSI);
Прикрепленные файлы:




Найденные решения
1С неправильно считает длину,
сам решаю через
нет смысла сохранять в файл, если не используете бинарные данные, на сколько помню и их через потоки можно объединить
альтернатива
с Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br"); аккуратнее, потому что нужно еще сжать/разжать средствами 1С
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
сам решаю через
ПотокТело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
ЗаписьДанных.ЗаписатьСтроку(СтрокаДанныеФ);
ЗаписьДанных.Закрыть();
ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
ДополнительныеПараметры.Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ="));
ДополнительныеПараметры.Вставить("Данные", ДвоичныеДанныеТело);
Показатьнет смысла сохранять в файл, если не используете бинарные данные, на сколько помню и их через потоки можно объединить
альтернатива
с Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br"); аккуратнее, потому что нужно еще сжать/разжать средствами 1С
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1С неправильно считает длину,
сам решаю через
нет смысла сохранять в файл, если не используете бинарные данные, на сколько помню и их через потоки можно объединить
альтернатива
с Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br"); аккуратнее, потому что нужно еще сжать/разжать средствами 1С
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
сам решаю через
ПотокТело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
ЗаписьДанных.ЗаписатьСтроку(СтрокаДанныеФ);
ЗаписьДанных.Закрыть();
ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
ДополнительныеПараметры.Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ="));
ДополнительныеПараметры.Вставить("Данные", ДвоичныеДанныеТело);
Показатьнет смысла сохранять в файл, если не используете бинарные данные, на сколько помню и их через потоки можно объединить
альтернатива
с Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br"); аккуратнее, потому что нужно еще сжать/разжать средствами 1С
(4)Сделал через поток
Заголовок добавил (см. вложение). Размер не отличается от первоначального, да и результат тот же. Ответ размером 1303 байта выдает ошибку при расшифровке.
А заголовок
ПотокТело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
ЗаписьДанных.ЗаписатьСтроку("--" + Boundary);
ЗаписьДанных.ЗаписатьСтроку("Content-disposition: form-data; name=""json""" + Символы.ПС);
ЗаписьДанных.ЗаписатьСтроку(КодированнаяСтрокаJSONДляОтправки);
ЗаписьДанных.ЗаписатьСтроку("--" + Boundary);
ЗаписьДанных.ЗаписатьСтроку("Content-disposition: form-data; name=""signature""" + Символы.ПС);
ЗаписьДанных.ЗаписатьСтроку(КодированнаяСтрокаСигнатуры);
ЗаписьДанных.ЗаписатьСтроку("--" + Boundary + "--");
ЗаписьДанных.Закрыть();
ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ="));
Запрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере, Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело);
ПоказатьЗаголовок добавил (см. вложение). Размер не отличается от первоначального, да и результат тот же. Ответ размером 1303 байта выдает ошибку при расшифровке.
А заголовок
"Accept-Encoding", "gzip, deflate, br"
мне нужен, т.к. данные еще необходимо разархивировать, т.к. при отправке сервис использует zLib. Но это я уже поборол.
Прикрепленные файлы:

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот