Некорректный HTTPОтвет

1. koln 02.09.21 09:12 Сейчас в теме
Вопрос является продолжением темы https://forum.infostart.ru/forum15/topic268216/
С криптографией разобрался. Теперь возник вопрос по поводу получения корректного ответа на запрос, отправленный из 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);
но результата это не дало.
Прикрепленные файлы:
Найденные решения
4. malikov_pro 1293 02.09.21 11:14 Сейчас в теме
1С неправильно считает длину,

РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);


сам решаю через

ПотокТело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
ЗаписьДанных.ЗаписатьСтроку(СтрокаДанныеФ);
ЗаписьДанных.Закрыть();
ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
ДополнительныеПараметры.Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ="));
ДополнительныеПараметры.Вставить("Данные", ДвоичныеДанныеТело);
Показать


нет смысла сохранять в файл, если не используете бинарные данные, на сколько помню и их через потоки можно объединить
альтернатива

с Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br"); аккуратнее, потому что нужно еще сжать/разжать средствами 1С
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. retr0 02.09.21 09:56 Сейчас в теме
(1)
ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки,КодировкаТекста.ANSI);
Что-то мне подсказывает что кодировка должна быть UTF8 а не ANSI
3. koln 02.09.21 10:57 Сейчас в теме
(2)Пробовал. Там вообще 112 байт получается. Ну и также не расшифровывается.
4. malikov_pro 1293 02.09.21 11:14 Сейчас в теме
1С неправильно считает длину,

РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);


сам решаю через

ПотокТело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
ЗаписьДанных.ЗаписатьСтроку(СтрокаДанныеФ);
ЗаписьДанных.Закрыть();
ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
ДополнительныеПараметры.Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ="));
ДополнительныеПараметры.Вставить("Данные", ДвоичныеДанныеТело);
Показать


нет смысла сохранять в файл, если не используете бинарные данные, на сколько помню и их через потоки можно объединить
альтернатива

с Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br"); аккуратнее, потому что нужно еще сжать/разжать средствами 1С
5. koln 02.09.21 13:04 Сейчас в теме
(4)Сделал через поток
	ПотокТело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
	ЗаписьДанных.ЗаписатьСтроку("--" + 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. Но это я уже поборол.
Прикрепленные файлы:
6. koln 02.09.21 14:34 Сейчас в теме
(4)Убрал заголовок
"Accept-Encoding", "gzip, deflate, br"
и все прошло нормально. Спасибо за направление.
Оставьте свое сообщение

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