[Шпаргалка] Вычисление Content-Length в POST запросе на примере Битрикс 24

20.11.23

Интеграция - WEB-интеграция

Вычисление Content-Length в POST запросе на примере Битрикс 24. Информации про это в интернете мало, может, кому-то сэкономит время.

Добрый день.

Встала простая задача по restapi обратиться в битрикс и забрать оттуда данные по массиву id.

Дергаем ручку в Postmane - все ок.

 

 

Делаем Http post запрос из 1с - ответ 200, но пустой результат. Все дело в том что Postman умеет высчитывать Content-Length. В 1С его нужно высчитывать вручную, и передавать не серилизованный JSON в теле а файл. 

Ниже работающий пример:

       HTTPСоединение  = ПолучитьHTTPСоединение();
	   перЗапрос = "local/rest/1C/deal.php";
	   
		
		Структура = Новый Структура;
		Структура.Вставить("id", ИдСтрока);
	
		ЗаписьJSON = новый ЗаписьJSON();
		ЗаписьJSON.УстановитьСтроку();
		ЗаписатьJSON(ЗаписьJSON, Структура);
		
		ДанныеДляОтправкиJSON = ЗаписьJSON.Закрыть();  
		
		ФайлЗапроса = ПолучитьИмяВременногоФайла();
		ТекстовыйФайл = Новый ТекстовыйДокумент;
   		ТекстовыйФайл.УстановитьТекст(ДанныеДляОтправкиJSON);          
   		ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI); 
		
		ФайлОтправки = Новый Файл(ФайлЗапроса);
   		РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

       	Заголовки = Новый Соответствие;
		Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");  
		Заголовки.Вставить("Content-Length", РазмерФайлаОтправки); 

		HTTPЗапрос = Новый HTTPЗапрос(перЗапрос, Заголовки);

		
		HTTPЗапрос.УстановитьИмяФайлаТела(ФайлЗапроса);
		
		HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
		
		СтрокаJSON = HTTPОтвет.ПолучитьТелоКакСтроку(); 
	
		ЧтениеJSON = Новый ЧтениеJSON();
		ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
		 
		перМассив = ПрочитатьJSON(ЧтениеJSON);

 

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

WEB-интеграция Разработчик Аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    7293    33    4    

34

WEB-интеграция Анализ продаж Системный администратор Разработчик Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    44294    76    45    

32

Сайты и интернет-магазины WEB-интеграция Системный администратор Разработчик Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    25340    41    26    

30

WEB-интеграция Системный администратор Разработчик Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена по API между конфигурацией 1С:Альфа-Авто 6 и порталом LogicStar. Позволяет работать с несколькими обменами LogicStars разных брендов (CHERY, OMODA, JAECOO, EXEED, TENET) в одной информационной базе в ручном и автоматическом режиме. Поддерживается выгрузка заказ-нарядов, реализаций товаров и товарных остатков.

20740 руб.

13.05.2025    2804    4    0    

7

Интеграция WEB-интеграция Системный администратор Разработчик Аналитик Руководитель проекта 1С:Предприятие 8 1C:Бухгалтерия 1C:ERP 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ERP Управление предприятием 2 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Обмен данными с 1С. Данный модуль подойдет, если вам нужно: выгрузить данные из 1С в другой сервис (сайт, мобильное приложение, CRM), загрузить в 1С данные из скрипта или сторонней системы, изменить формат, потому что 1С предоставляет данные не так, как нужно.

14640 руб.

02.04.2025    4415    1    6    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. efin 20.11.23 15:10 Сейчас в теме
Отлично все 1С умеет высчитывать сам и указывать в заголовке.
А вот если применять таблетки, особенно подмену inet.dll - то перестает высчитывать, как пишут на форумах.
user621724_Dimav1979; +1 – Ответить
2. user621724_Dimav1979 420 20.11.23 15:55 Сейчас в теме
(1) подменами inet.dll не занимаемся )))
3. Serg O. 337 17.10.25 20:01 Сейчас в теме
Небольшие замечания, (никто не заметил или не написал просто?)

1) почему кодировка ANSI (Windows) ?
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);

если далее передаётся параметр
Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
------------------------------------------------------------------------------------------
наверное сразу надо файл в UTF-8 кодировке писать
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);

2) зачем РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
достаточно РазмерФайлаОтправки = Формат(ФайлОтправки.Размер(), "ЧГ=0"); // без разделителей групп
Для отправки сообщения требуется регистрация/авторизация