В платформе 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 делается очень просто. Задача вроде как и тривиальная, но все же вызвала некоторые сложности.
- Формирование валидного JSON из результата запроса.
2. Отправка сформированного запроса на сайта
Итак начнем по порядку.
Формирование JSON из Результата запроса
Ниже приведу код и добавлю некоторые комментарии для того чтобы было понятно. Вначале мы переводим Результат Запроса в ТаблицуЗначений (ТЗ) , затем ТЗ в Массив Структур. И только затем полученный массив сериализуем в JSON. В общем ничего сложного, код предельно простой.
Отправка POST-запроса с JSON в 1с
Тут уже попотеть пришлось чуточку больше, так как данную задачу решал впервые, и быстрое гугление не дало результатов. Все примеры которые находил были разрозненны и по каким то причинам не работали. Возможно у меня руки не оттуда растут, не отрицаю.
Полученный на предыдущем этапе файл мы должны отправить. Делается это так.
Стоит отметить что данные будут отправлены в теле запроса, а не в параметрах POST.