1с отправить файл post

В платформе 1С 8.3 и 8.2 реализована возможность использования HTTP запросов, а именно GET и POST запросов. Это очень удобный инструмент для реализации обмена данными с различными веб-ресурсами, взаимодействия с веб-сервисами и прочими службами или системами.

GET запросы в 1С 8.3

Самым распространенным HTTP запросом является GET запрос. Как правило, данный запрос используется для получения какого-либо ресурса или содержимого указанного ресурса. Например, файла.

Принцип работы GET запроса очень прост. После соединения с сервером происходит отправка заголовка запроса, и, если запрос одобрен, отправителю возвращается ответ, содержащий тело с содержимым запрашиваемого ресурса.

Отличительной особенностью GET запроса является отсутствие тела запроса, наличествуют только заголовки.

В качестве примера рассмотрим получение GET запросом логотипа нашего сайта https://programmist1s.ru и сохранение его на диске.

Для начала рассмотрим вопрос, как же нам сформировать сам текст запроса. На самом деле в отношении файла с картинкой это совсем не сложно. Воспользуемся инструментами браузера. Я буду использовать Оперу, в Вашем браузере процесс может несколько отличаться, но принцип один.

Итак, нажимаем правой кнопкой мышки на логотип и выбираем «Посмотреть код элемента»:

Откроется окно с кодом, где нас интересует тэг img src= и далее адрес картинки:

Вот этот адрес и нужно скопировать. В разных браузерах по-разному можно это сделать, в Опере это проще всего сделать, перейдя сначала в режим редактирования (правая кнопка мышки – Edit attribute).

Получите 267 видеоуроков по 1С бесплатно:

Теперь разберем ее на две части:

  • https://programmist1s.ru – это наш сервер;
  • /wp-content/themes/govpress-new/images/GOODWILL.png – это и есть текст запроса.

Теперь можно переходить к написанию кода. Я приведу весь код сразу, целиком. А пояснения будут в комментариях. Готовую обработку можно скачать здесь.

&НаКлиенте
Процедура ВыполнитьЗапрос(Команда)
// Создаем HTTPСоединение, указываем сервер
Соединение = Новый HTTPСоединение(СерверДляЗапроса);
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
// Запросим имя файла, который будет сохранен. По умолчанию расширение png
СтрФильтр = НСтр(«ru = ‘Файл’») + «(*.»+»png»+»)|*.»+ «png»;
ДиалогОткрытияФайла.Фильтр = СтрФильтр;
ДиалогОткрытияФайла.Заголовок = «Укажите имя файла»;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
Если ДиалогОткрытияФайла.Выбрать() Тогда
// Выполнить GET запрос:
Соединение.Получить(ТекстДляЗапроса, ДиалогОткрытияФайла.ПолноеИмяФайла);
Сообщить(«Удачно выполнен GET запрос!»);
Иначе
Сообщить(«Не выбран файл!»);
КонецЕсли;
КонецПроцедуры

Как видим, все достаточно просто. Фактически, мы создаем HTTP соединение, а затем отправляем запрос и сохраняем ответ в файл:

POST запросы в 1С 8.3

POST запросы кроме заголовков могут содержать еще и тело. Тем самым они предоставляют гораздо большие возможности, чем GET запросы. Они широко применяются, например, для авторизации на ресурсе и последующих действий. Также с помощью POST запросов можно запускать сложные процессы, зависящие от входящих данных, и так далее. Кроме того, POST запросы бывают двух типов:

Практический пример я рассматривать не буду, так как область применения POST запросов очень обширна и, как правило, связана со сложными процессами, достойными отдельной разработки. Я дам лишь пример общей схемы работы с такими запросами. Если у Вас возникнут вопросы или затруднения, мы всегда рады ответить на вопросы или выполнить разработку под заказ.

Итак, отправка POST запроса средствами платформы 1С: Предприятие 8.3 осуществляется следующим образом:

&НаКлиенте
Процедура ВыполнитьЗапрос(Команда)
// Создаем новое HTTP соединение с указанием сервера
// Последний параметр отвечает за использование защищенного соединения
HTTP = Новый HTTPСоединение(ИмяСервера. Истина);
// Получим временный файл для передачи в теле POST запроса
ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
// Запишем в файл содержимое тела запроса (текст)
ТекстФайл = Новый ТекстовыйДокумент;
ТекстФайл.УстановитьТекст(ФайлТелаЗапроса);
ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.ANSI);
// Получим размер данных для передачи в заголовок
ФайлНаОтправку = Новый Файл(ФайлТелаЗапроса);
РазмерФайлаНаОтправку = XMLСтрока(ФайлНаОтправку.Размер());
// Получим временный файл — тело ответа POST запроса
ФайлРезультат = ПолучитьИмяВременногоФайла();
// Заголовок создадим в виде соответствия
ЗаголовокЗапросаHTTP = Новый Соответствие();
// Передаем в заголовках размер и тип данных на отправку
ЗаголовокЗапросаHTTP.Вставить(«Content-Length», РазмерФайлаНаОтправку);
ЗаголовокЗапросаHTTP.Вставить(«Content-Type», «application/json; charset=utf-8»);
// Отсылаем POST запрос на обработку.
// СсылкаНаРесурс — ссылка на веб-сервер (страницу), к которой посылается POST запрос
HTTP.ОтправитьДляОбработки(ФайлТелаЗапроса, СсылкаНаРесурс, ФайлРезультат, ЗаголовокЗапросаHTTP);
// Получим ответ
ТекстовыйФайлОтвета = Новый ТекстовыйДокумент;
ТекстовыйФайлОтвета.Прочитать(ФайлРезультат, КодировкаТекста.UTF8);
СтрокаОтветаСервера = ТекстовыйФайлОтвета.ПолучитьТекст();
КонецПроцедуры

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Встроенный объект Windows — WinHttpRequest предоставляет достаточно удобную возможность взаимодействовать с сетью по протоколу HTTP.

В Интернете можно немало материалов рассказывающих о том, как использовать данный объект в 1С. Но вот материалов, рассказывающих о том, как с помощью этого объекта отправить на сервер файл — не так много, этот-то пробел и призвана восполнить данная статья.

Начнем с серверной части. У себя на локальном сервере я создал файл с названием «file.php» и вот таки содержимым:

Единственное, что делает этот скрипт, это пытается вывести файл переданный ему в параметре «data».

личный блог

Прикручивая очередную интеграцию, понадобилось мне значит отправить на веб-сервис сайта POST запрос с остатками товаров. Остатки товаров были аккуратно упакованы в JSON. В версиях платформы выше 8.3.6 делается очень просто. Задача вроде как и тривиальная, но все же вызвала некоторые сложности.

  1. Формирование валидного JSON из результата запроса.

2. Отправка сформированного запроса на сайта

Итак начнем по порядку.

Формирование JSON из Результата запроса

Ниже приведу код и добавлю некоторые комментарии для того чтобы было понятно. Вначале мы переводим Результат Запроса в ТаблицуЗначений (ТЗ) , затем ТЗ в Массив Структур. И только затем полученный массив сериализуем в JSON. В общем ничего сложного, код предельно простой.

Отправка POST-запроса с JSON в 1с

Тут уже попотеть пришлось чуточку больше, так как данную задачу решал впервые, и быстрое гугление не дало результатов. Все примеры которые находил были разрозненны и по каким то причинам не работали. Возможно у меня руки не оттуда растут, не отрицаю. ��

Полученный на предыдущем этапе файл мы должны отправить. Делается это так.

Стоит отметить что данные будут отправлены в теле запроса, а не в параметрах POST.

Оцените статью
Добавить комментарий