Подключение к http сервису через multipart/form-data в 1С

30.10.23

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

Описан механизм работы с http сервисом через multipart/form-data в 1С.

Было необходимо из 1С отправить файл в специальный API, на вход требовалось подавать pdf файл и код товара через  multipart/form-data.

1) Первым делом воспроизвел данный механизм в POSTMAN, указав необходимые данные в секциях body и headers


   

 

В body указаны обязательные параметры («file» и «product_code» для API, в том числе и сам передаваемый файл

2) Для того чтобы оформить передачу в 1с нужно через POSTMAN обратиться к SNIPPET, выбираем http

 

   

 

4) Далее очень важно соблюдать структуру, она должна быть идентичная нашему snippet,  важен каждый символ, отступ, перенос.

Необходимо создать конвертируемый разделитель строк:

Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");

И теперь построчно также как в snippet записываем данные через объект запись данных

 

 

Теперь поясню построчно:

Разделитель нужно указать именно как в коде выше

Создаем объект Запись данных, в него и будем записывать наши данные построчно

ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");   

ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);  

Начинаем с разделителя Прописываем данные form-data один в один как в Snippet, подставляя ПОЛНОЕ имя файла (полный пуnь к файлу, пример "\\сеть\НашаПапка\НашФайл.pdf")

ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ПолноеИмяФайла + """");   

Обязательно указываем тип передаваемых данных, в нашем случае это pdf файл (тут важно верно указать тип)

ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");

ЗаписьДанных.ЗаписатьСтроку(""); Пустая строка как в snippet

Записываем наш pdf файл в виде двоичных данных

 

 

 

ЗаписьДанных.Записать(ДвоичныеДанные);   

ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); Снова Разделитель

Добавляем данные второго параметра как оно написано в snippet

ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + ИмяВторогоПараметра + ";");

ЗаписьДанных.ЗаписатьСтроку("Content-Type: text/html"); тут необходимо указать тип

ЗаписьДанных.ЗаписатьСтроку(""); Не забываем про пустую строку

ЗаписьДанных.ЗаписатьСтроку(Код);   Второй параметр, тут просто передаем строку

ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--"); Снова разделитель

ЗаписьДанных.ЗаписатьСтроку(""); ПустаяСтрока

ЗаписьДанных.Закрыть(); 

И на этом запись закончена, закрываем запись данных.

В помощь была взята статья статьи, которая помогла мне с данной задачей, но кое-что я решил дополнить.

Если делать все аналогично, соблюдая все нюансы то  код для отправки запроса в формате multipart/form-data отработает правильно.

Спасибо за внимание.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    16079    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18162    10    15    

16

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    85384    26    51    

50

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12990    33    8    

12

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16609    43    49    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3043 30.10.23 15:46 Сейчас в теме
2. bayselonarrend 1273 30.10.23 16:11 Сейчас в теме
Мог просто коннектор взять, да и все
Labotamy; wtlz; user603532_fan_club_chelsea; German; Ruschel; +5 Ответить
4. caponid 31.10.23 21:33 Сейчас в теме
(2)
Коннектор нужно доработать напильником - он не формирует Content-length
хотя тут в "ручном" примере его тоже нет.

Некоторые сервера могут не пропустить такой запрос.

ЗЫ: Postman его сформировал ))
it_depDi; +1 Ответить
5. bayselonarrend 1273 31.10.23 21:57 Сейчас в теме
(4)Да мимо прочего, тема много раз уже обсосана. Даже если взять статью, которую автор сам указал в конце - в чем разница? Если я ничего не упустил, то только во втором файле ¯\_(ツ)_/¯ и записи JSON, которая потом не используется ¯\_(ツ)_/¯¯\_(ツ)_/¯¯\_(ツ)_/¯
3. serpent 67 31.10.23 10:07 Сейчас в теме
исправьте " вашем каждый"
6. Red_Devil 179 03.11.23 08:37 Сейчас в теме
Автор молодец, чем больше примеров тем лучше. Про POSTMAN тоже полезно.
Сам сейчас делаю выгрузку электронной транспортной накладной в контур логистику
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");

	Тело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");               
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""FormFiles""; filename=""ON_TRNACLGROT____0_20231101_dbf80806-1950-45ac-be43-e59dd6c825a3.xml""");
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: multipart/form-data");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(Результат.ДвоичныеДанные);
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
	ЗаписьДанных.Закрыть();

	ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
	
	ssl = Новый ЗащищенноеСоединениеOpenSSL(
	            Новый СертификатКлиентаWindows(),
	            Новый СертификатыУдостоверяющихЦентровWindows());
				
	АдресСайта = "logist-api.kontur.ru";
	HTTPСоединение = Новый HTTPСоединение(АдресСайта,,,,,,ssl);
	HTTPЗапрос = Новый HTTPЗапрос;
	HTTPЗапрос.АдресРесурса = "/v1/documents/waybill";
	
	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + разделитель);
	HTTPЗапрос.Заголовки.Вставить("x-kontur-apikey", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
	ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
	НашОтвет = ОтветHTTP.ПолучитьТелоКакСтроку();
	Сообщить(НашОтвет);
Показать
Оставьте свое сообщение