1c http запрос post параметры

Работа с HTTP в 1С 8.2 и 8.3

В этой статье я попробую рассказать о том, какими средствами располагает технологическая платформа для работы с протоколом HTTP. В начале будет немного общей информации, а затем конкретные примеры. Отмечу, что в статье используется технологическая платформа версии 8.3.12.1595.

Общая информация

Для работы с протоколом HTTP в 1С существуют три основных объекта — HTTPСоединение, HTTPЗапрос и HTTPОтвет, кроме этого для создания HTTPS-соединения используется объект ЗащищенноеСоединениеOpenSSL, а для соединения через прокси-сервер объект ИнтернетПрокси. Существует еще несколько объектов, которые могут использоваться при работе с протоколом HTTP, но используются они достаточно редко и не так важны.

Назначение основных объектов следует из названия.

HTTPСоединение отвечает за соединение с сервером — в свойствах объекта, помимо обязательного адреса, можно указать порт, прокси, логин, пароль, таймаут, защищенное соединение и флаг аутентификации ОС, а методы повторяют основные методы HTTP.

HTTPЗапрос позволяет описать что именно мы хотим от сервера — в свойствах нужно обязательно указать адрес ресурса к которому мы обращаемся, кроме этого имеется возможность указать какие-либо заголовки, методы же, в свою очередь, позволяют различными способами установить и получить тело запроса.

HTTPОтвет является результатом выполнения запроса к серверу — из свойств мы можем узнать ответные заголовки и код состояния, а методы позволяют получить тело ответа различными способами.

ИнтернетПрокси позволяет указать настройки прокси-сервера — с помощью метода Установить() можно указать параметры для подключения к прокси-серверу, отмечу, что свойства «Пароль» и «Пользователь» являются устаревшими, использовать их не рекомендуется.

ЗащищенноеСоединениеOpenSSL создает защищенное соединение OpenSSL — имеется возможность указать сертификат клиента и/или сертификат удостоверяющего центра, в большинстве случаев (для доступа к обычным сайтам по протоколу HTTPS) указывать какие либо сертификаты не требуется.

Заканчиваем с теорией и переходим к практике.

Практические задачи при работе с HTTP

В качестве практической части рассмотрим задачи, которые чаще всего встречаются при работе с протоколом HTTP в 1С

Источник

HTTP запросы в 1С 8.3: примеры GET и POST запросов

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

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

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

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

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

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

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

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

1c http запрос post параметры

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

1c http запрос post параметры

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

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

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

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

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

1c http запрос post параметры

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. Мы работаем в Москве и области.

Источник

Обработка POST запросов 1С в связке с Apache

Приветствую всех читателей infostart’a. Данная статья будет посвящена интересному вопросу обработки POST запросов средствами 1С и HTTP– сервера Apache.

Однажды предо мной встала задача обеспечить обработку POST запросов средствами 1С. То есть 1С должна была принять POST запрос, обработать его, выполнить запись в базу определенной информации и вернуть ответ на запрос в виде XML. Это популярная тема в свете различных терминальных платежей и платежей через интернет. До этого такими задачами я не занимался. Сразу скажу, что база 1С работала в обычном приложении, версия 1С 8.2 файловый вариант. Кроме того было выставлено ограничение, а именно: база 1С не должна быть видна извне.

Поиск необходимой информации.

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

Основная проблема 1С в том, что она одновременно может обрабатывать только один POST запрос. Поясню подробней. Если, например, придет POST запрос и 1С начнет его обрабатывать и что-то там записывать в базу, то запрос,пришедший в это время, пока 1С обрабатывает предыдущий, будет проигнорирован вообще. Это никуда не годилось. Нашел платную обработку, которая к тому же требовала наличия MSNetframework4. Она позволяла обрабатывать несколько запросов одновременно, в порядке очереди, но количество таких запросов было невелико, что-то 4-5. Данный вариант был не приемлем, т.к. объяснения принципа работы были мне не очень понятны и я не знал, поможет ли мне это решить техническое задание, поэтому я решил с ней не связываться. К тому же смущало наличие MSNetframework 4. И я, на самом деле, не знал, насколько это надежно сточки зрения безопасности. А безопасность – выставлялось как основное условие.

Ища на просторах интернета нужную информацию, я определил для себя, что на самом деле уже есть программы, которые умеют обрабатывать POST запросы очень хорошо. Это HTTP – сервера. К тому же они бесплатны, что немаловажно. Я остановился на Apache. Осталось только придумать, как связать 1С и Apache. Собственно схема, придуманная мной, была такой. POST запрос принимает Apache, обрабатывает,сохраняет в виде txt файла и кладет его в папку, которая расшарена (видна в локальной сети). 1С,соответственно, с периодичностью 1 раз в секунду проверяет эту папку на наличие такого файла, и, найдя его, обрабатывает и возвращает XML ответ. Оговорюсь,что XML ответ – это обычный файл в формате xml. Я это подчеркиваю, т.к. что такое POST запрос, мне было понятно, а вот что такое XML ответ, я сразу понял. Надеюсь, гуру php не будут смеяться. А вот новичкам этого дела – это очень полезная информация. Осталось самое «простое», реализовать задуманное, и я принялся за дело.

Я имел только общие понятие о скриптах php, которые и обрабатывал Apache. Осмотр команд php показал, что в принципе, ничего сложного нет, а все команды ориентированы под нужды интернет сервера. Нужно было написать скрипт php,который создает txt файлы и «подсовывает» их в нужную папку. Это было успешно сделано (пример скрипта с комментариями можно скачать).

Удаление отработанных файлов было положено на 1С. Это важно. Apache только принимает запросы, обрабатывает их и выкладывает txt файлы в расшареную папку. Apache может одновременно обработать очень много запросов, и создать нужное количество файлов и ждать ответа. А 1С, не спеша обрабатывает txt файлы и отвечает XML ответами.

Надеюсь, статья окажет помощь тем программистам 1С, которые сталкиваются с такими задачами. Также, если статья понравится сообществу infostarta’a, то в продолжение опишу особенности создания XML ответов.
***
В архиве пример скрипта с комментариями, которые позволят программисту понять как создать собственный скрипт.

Источник

Передача файлов и данных на веб-сервер из 1С методами GET и POST

При интеграции 1С с веб-сайтами всегда встает вопрос о передачи некоторых данных на веб-сервер. Будь то это передача параметров запроса для получения данных от веб-сервера в 1С или же передача данных из 1С, которые должны быть сохранены или каким-то образом обработаны на веб-сервере. Передаваться могут как простые данные в виде строк, чисел, так и целые файлы (изображения, XML-файлы и прочее). Для передачи и получения файлов и данных на веб-сервер в 1С используется объект HTTPСоединение.

Создание и инициализация HTTP соединения в 1С
Для инициализации HTTP соединения в 1С необходимо создать объект HTTPСоединение и в конструкторе указать параметры HTTP соединения.
Код 1C v 8.х

Передача данных на веб-сервер из 1С методом GET.
Для передачи данных на веб-сервер из 1С методом GET используется процедура Получить() объекта HTTPСоединение.
Код 1C v 8.х

В качестве источника указывается строка с адресом запроса, идущая после названия домена и символа «/». Так, если необходимо отправить данные на адрес https://www.mysite.com/getusers.php, то при создании HTTP соединения в конструкторе HTTPСоединение в поле «Сервер» указывается «www.mysite.com», признак защищенного соединения устанавливается в Истина, а в процедуре Получить() в параметре Источник указывается «getUsers.php».

В поле ИмяВыходногоФайла указывает имя файла на диске, в который будут сохранены данные, полученные от сервере в результате запроса. Так, например, если сервер возвращает список пользователей в формате XML, то на диск в указанный файл будет сохранен XML файл со списком пользователей.

О заголовках более подробно будет сказано ниже.

Ниже приведен пример, поясняющий все выше сказанное.
Код 1C v 8.х

Заголовки HTTP
Ниже приведена общая информация о HTTP заголовках из википедии.

Заголовки HTTP (англ. HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA. Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.

Все заголовки разделяются на четыре основных группы:

General Headers (рус. Основные заголовки) — должны включаться в любое сообщение клиента и сервера.
Request Headers (рус. Заголовки запроса) — используются только в запросах клиента.
Response Headers (рус. Заголовки ответа) — только для ответов от сервера.
Entity Headers (рус. Заголовки сущности) — сопровождают каждую сущность сообщения.
Именно в таком порядке рекомендуется посылать заголовки получателю.

Более подробно о заголовках HTTP можно прочитать здесь. Так же можно ознакомится со списком заголовков HTTP.

От себя лишь добавлю, что, если это явно не указано в требованиях к отправке данных веб-серверу заголовки HTTP для метода GET можно не указывать. Для метода POST обычно нужно указать заголовки Content-Type (тип передаваемых данных, например: «Content-Type: text/html;charset=utf-8») и Content-Length (размер передаваемых данных в байтах, например: «Content-Length: 1348»).

В качестве источника указывается файл, содержимое которого необходимо отправить на сервер для обработки. Подробнее о формировании содержимого файла-источника будет сказано ниже.

Поле АдресРесурса аналогично полю Источник процедуры Получить(), т.е. указывается строка с адресом запроса, идущая после имени домена и символа «/».

Поле ИмяВыходногоФайла также аналогично одноименному полю процедуры Получить(), т.е. содержит имя файла, в котором будут сохранены данные, полученные от сервера в результате обработки исходных данных.

О заголовках было упомянуто выше. Напомню лишь, что для метода POST обычно указываются заголовки Content-Type и Content-Length. В качестве параметра заголовка Content-Length указывается размер файла-источника, преобразованный с помощью функции XMLСтрока().

Ниже приведен пример, поясняющий все выше сказанное.
Код 1C v 8.х

Передача параметров методом POST.
Для передачи параметров, аналогично методу GET, можно сформировать строку параметров, записать их в текстовый файл и отправить этот файл на сервер для обработки. Ниже приведен пример аналогичный примеру отправки методом GET, но теперь те же данные отправляются методом POST.
Код 1C v 8.х

Передача файлов методом POST.
Зачастую данные для обработки задаются не виде строки параметров разделенных «&», как в рассматриваемых выше примерах, а виде файла определенного формата, например XML или JSON. Рассмотрим пример отправки данных на веб-сервер для обработки методом POST, которые задаются в формате XML. Например, сервер может добавить ваш комментарий к материалу. В описании процедуры добавлении сказано, что данные необходимо отправлять по адресу www.mysite.com/addComment.php. Сами данные должны быть переданы в следующем виде:
Код

где:
— id пользователя на сайте, от имени которого добавляется комментарий;
— id материала на сайте, к которому добавляется комментарий;
— текст комментария.

Предположим, что нам уже известны id пользователя и материала и они хранятся в переменных user_id и post_id. Ниже приведен пример, решающий нашу задачу.
Код 1C v 8.х

Bounday можно сформировать, например, таким образом
Код 1C v 8.х

Все данные отделяются друг от друга разделителем boundary. Начинать разделитель нужно с «—«:
Код


Content-Disposition: form-data; name=» »

Для отправки файла необходимо еще добавить тип и имя файла:


Content-Disposition: form-data; name=» «; filename=» »
Content-Type: (например image/jpeg или text/plain)

Итак, например, нам нужно передать на веб-сервер текстовый файл через параметр «text», его описание через параметр «desc» и id пользователя через параметр «uid», для которого будет загружен наш файл.

—ccf8111910
Content-Disposition: form-data; name=»uid»

0123456
—ccf8111910
Content-Disposition: form-data; name=»desc»

Стих А.С. Пушкина
—ccf8111910
Content-Disposition: form-data; name=»text»; filename=»stih.txt»
Content-Type: text/plain

А теперь перейдем непосредственно к 1С. Пусть у нас будет форма с реквизитами «Пользователь», «Описание» и «ИмяФайла». Реализуем отправку данных, описанным выше способом
Код 1C v 8.х

Передача текстовых файлов таким способом проблем не вызывает. Сложнее дело обстоит с файлами, содержащими двоичные данные (изображения, архивы и т.п.). Все дело в том, что в 1С просто нет методов для чтение двоичных файлов в строку. Если мы делаем обмен со своим сайтом, которые сами и разрабатывали, то можно просто преобразовать файл в строку Base64 при помощи процедуры Base64Строка(), а на стороне сервера преобразовать строку Base64 обратно.
Код 1C v 8.х

Источник

Учимся создавать http сервис (часть четвертая). Изучение метода POST http запроса (передача текстовых данных)

-Перенесем данные справочника «Номенклатура» из базы источник в базу приемник при помощи http сервиса, используя POST запрос. Переносить данные будем в JSON формате.

Подготовим базу источник.

-Создаем чистую информационную базу.

-Назовем ее «БазаИсточник»

-Добавляем в нее несколько объектом метаданных:

Реквизит «Атрикул» тип строка 25

— Обработка «Изучение POST Запросов»

1c http запрос post параметры

Подготовим базу приемник

-Создаем чистую информационную базу

-Назовем ее «БазаПриемник»

-Добавим в нее несколько объектов метаданных:

Реквизит «Атрикул» тип строка 25

-Создаем новый http сервис «Изучение POST Запросов»

-Корневой URL – « post »

1c http запрос post параметры

-Переходим на закладку «Шаблоны URL »

— Добавляем новый шаблон «ЗагрузкаНоменклатуры»

-Создадим шаблон, назовем его « product _ json »

— Добавим новый метод «ЗагрузкаНоменклатурыJSON»

1c http запрос post параметры

1c http запрос post параметры

-Публикуем http сервис на веб сервере, если забыли, как это сделать, смотрите статью

После публикации у меня получился следующий путь «http://localhost/post_test/hs/post/product_json/»

Localhost – IP адрес

post_test – имя публикации

hs – признак http сервиса

post – корневой каталог

Переходим в базу источник.

-Открываем обработку «Изучение POST Запросов»

-Создадим форму. На форме разместим кнопку «Перенести номенклатуру JSON »

1c http запрос post параметры

Шаблон, по которому мы подключаемся из 1С к http сервису следующий:

-Создаем объект типа «HTTPСоединение», в его конструкторе передаем ip адрес http сервиса, например, так:

— Создаем объект типа «HTTPЗапрос», в его конструкторе указываем адрес ресурса и заголовки, например так:

-Помещаем данные, которые мы хотим отправить на сервер в тело запроса. Мы хотим передать текстовые данные, для этого мы воспользуемся методом «УстановитьТелоИзСтроки»

-Отправляем данные на сервер. (пример кода)

Еще раз. Для того чтобы передать данные на сервер, надо эти данные поместить в тело POST запроса. В заголовке необходимо указать какого типа эти данные.

-Открываем базу источник в режиме предприятия и добавляем в справочник «Номенклатура» несколько элементов.

1c http запрос post параметры

Базу источник мы подготовили!

Переходим в базу приемник

— Добавляем общий модуль «ОбщегоНазначения»

-В нем описываем две процедуры

-Переходим в обработчик метода «ЗагрузкаНоменклатурыJSON» http сервиса «ИзучениеPOSTЗапросов»

-Описываем в нем следующий код

Базу приемник мы подготовили.

Запускаем обработку из базы источник. Нажимаем на кнопку. И в базе приемнике создается номенклатура.

1c http запрос post параметры

1c http запрос post параметры

Видео инструкция тут:

Там же, вы сможете скачать файлы конфигурации источника и приемника.

Итак, мы решили поставленную задачу.

При реализации данного функционала была использована платформа 1С:Предприятие 8.3 (8.3.12.1567)

Специальные предложения

1c http запрос post параметры

1c http запрос post параметры

1c http запрос post параметры

1c http запрос post параметры

1c http запрос post параметры

1c http запрос post параметры

1c http запрос post параметры

1c http запрос post параметры

обработка ИзучениеPOSTЗапросов
а на картинке Изчение POSTЗапросов

для JSON наверное правильнее
HTTPЗапрос.Заголовки.Вставить(«Content-Type»,»application/json»);

А передать данные в теле запроса можно и методами PATCH, PUT, а не только POST.

Так, распространённая практика при создании REST API использовать POST для создание объекта, а PUT/PATCH для его изменения (метод DELETE, соответственно, используется для удаления).

А вообще, все эти методы используются на усмотрение программиста. Встречался с таким, что для всех запросов использовался только POST (и для получения данных, и для передачи).

По поводу заголовка Content-Type. Вы указываете text/plain, а передаёте json (Content-Type: application/json). А если учесть, что база-приёмник ни как этот заголовок не использует, то его вообще можно не передавать.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *