HTTPСоединение в 1С, работаем с веб-сервером

Обмен данными при помощи HTTPСоединения

Здравствуйте, коллеги!

Сегодня рассмотрим с вами пример взаимодействия с сайтом посредством использования HTTP запросов и HTTPсоединения.

Известно что существует 2 типа запросов – это POST
запрос и GET запрос, давайте рассмотрим выполнение обращения к веб-серверу при помощи POST
запроса.

Формируем POST-запрос. Отправляем и получаем данные.

Одной из особенностей обмена данными по http-протоколу в 1С предприятии с использованием «HTTPСоединение»
является то, что для обмена данными используются файлы, файл для отправки и файл получения. Давайте рассмотрим пример:

Для того, чтобы сформировать POST-запрос используем обычный текстовый файл, в который складываем все параметры, которые мы хотим передать на веб-сервер какому-либо скрипту:

//отправляет файл на сервер и возвращаетфайл

ФункцияОтправитьPOSTНаСервер(СтруктураПараметров)
Экспорт

ИмяФайлаОтправки
=СтруктураПараметров.ИмяФайлаОтправки;

ИмяФайлаПолучения=СтруктураПараметров.ИмяФайлаПолучения;

ЗаголовокHTTP
=
НовыйСоответствие();

ЗаголовокHTTP.Вставить(«Content-Type»,
«application/x-www-form-urlencoded»);

//ЗаголовокHTTP.Вставить(«Content-Type»,
«application/x-www-form-urlencoded» + Символы.ВК +
Символы.ПС + «charset:UTF-8″);

ФайлОтправки
=
НовыйЗаписьТекста(ИмяФайлаОтправки,КодировкаТекста.ANSI,Символы.ПС,
ЛОЖЬ);

СтрокаПараметров=«»;

Для
каждого
Стрка
из
СтруктураПараметров
.ПараметрыСкрипта
Цикл


СтрокаПараметров
=СтрокаПараметров+Стрка.Наименование+

«=»+Стрка.Значение+«&»;

КонецЦикла;

ЕслиПрав(СтрокаПараметров,1)=«&»
Тогда


СтрокаПараметров
=
Сред
(СтрокаПараметров,1,СтрДлина(СтрокаПараметров)-1);

КонецЕсли;

ФайлОтправки.Записать(СтрокаПараметров);

ФайлОтправки.Закрыть();

ФайлОтправки
=
Новый
Файл
(ИмяФайлаОтправки);

РазмерФайлаОтправки
=
XMLСтрока
(ФайлОтправки.Размер());

ЗаголовокHTTP.Вставить(«Content-Length»,
РазмерФайлаОтправки
);

НТТР
=
Новый
HTTPСоединение
(СтруктураПараметров.Сервер,,,,);

НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки,СтруктураПараметров.СкриптПриема,ИмяФайлаПолучения,ЗаголовокHTTP);

КонецФункции

Данную функцию мы будем использовать как вспомогательную для формирования и отправки файла на сервер.

В качестве параметра передаваемого функции будем использовать структуру следующего содержания:

СтруктураПараметров
= Новый
Структура();

СтруктураПараметров.Вставить(«ИмяФайлаОтправки»,
«ИмяфайлаОтп.txt«);

СтруктураПараметров.Вставить(«ИмяФайлаПолучения»,«ИмяФайлаПол.txt«);


ПараметрыСкрипта
= Новый
ТаблицаЗначений();


ПараметрыСкрипта.Колонки.Добавить(«Наименование»);


ПараметрыСкрипта.Колонки.Добавить(«Значение»);



НовСтрока
= ПараметрыСкрипта.Добавить();


НовСтрока.Наименование
= «client_code«;


НовСтрока.Значение
= «13«;

СтруктураПараметров.Вставить(«ПараметрыСкрипта»,ПараметрыСкрипта);

СтруктураПараметров.Вставить(«Сервер»,«Сервер«);

СтруктураПараметров.Вставить(«СкриптПриема»,«demo.php«);

Все значения, которые надо передать методом POST мы добавляем в таблицу значений. В данном случае мы передаем один параметр
client_code=13.

Давайте на примере создания обработки посмотрим использование этих функций, и заодно приведем пример php-скрипта, принимающего значение переданное из
1С.

Также вы можете скачать готовую ИБ, в которой есть указанный пример.

Зайдите в конфигуратор, выберите Файл – новая обработка. В обработке, назовём её«ЧтениеДанных» создайте новую форму.

В форме на вкладке реквизиты создайте новый реквизит «Реквизит1», тип данных выберите «Текстовый документ» — перетащите его на форму, также создайте новую команду(на вкладке «Команды») «ПолучитьДанные», перетащите команду на форму или создайте новую кнопку, назначив ей команду. У вас должно получиться следующее:

Теперь давайте скопируем в модуль форму приведенную в самом начале статьи функцию и создадим несколько своих. В итоге у вас должен получиться следующий текст:

&НаКлиенте

Процедура
ПолучитьДанные
(Команда)

ПолучитьДанныеНаСервере();

КонецПроцедуры

&НаСервере

Процедура
ПолучитьДанныеНаСервере
()

//
Вставить содержимое обработчика.

Структура
=
ПолучитьСтруктуруПараметров
();

ОтправитьPOSTНаСервер(Структура);


ИмяФайла
=
Структура
.ИмяФайлаПолучения;

Чтение
=
новый
ЧтениеТекста
(ИмяФайла);


Стр
=
Чтение
.ПрочитатьСтроку();


Пока
Стр
<>
Неопределено
Цикл


ЭтотОбъект
.Реквизит1.ДобавитьСтроку(Стр);


Стр
=
Чтение
.ПрочитатьСтроку();


КонецЦикла;


Чтение
.Закрыть();

КонецПроцедуры

&наСервере

Функция
ПолучитьСтруктуруПараметров
();

СтруктураПараметров
=
Новый
Структура
();

СтруктураПараметров.Вставить(«ИмяФайлаОтправки»,
«ИмяфайлаОтп.txt»);

СтруктураПараметров.Вставить(«ИмяФайлаПолучения»,«ИмяФайлаПол.txt»);


ПараметрыСкрипта
=
Новый
ТаблицаЗначений
();


ПараметрыСкрипта
.Колонки.Добавить(«Наименование»);


ПараметрыСкрипта
.Колонки.Добавить(«Значение»);



НовСтрока
=
ПараметрыСкрипта
.Добавить();


НовСтрока
.Наименование
=
«client_code»;


НовСтрока
.Значение
=
«13»;

СтруктураПараметров.Вставить(«ПараметрыСкрипта»,ПараметрыСкрипта);

СтруктураПараметров.Вставить(«Сервер»,«prof1c.kklab.ru»);

СтруктураПараметров.Вставить(«СкриптПриема»,«demo.php»);


Возврат
СтруктураПараметров
;

КонецФункции

//отправляет файл на сервер и возвращает файл

&НаСервере

Функция
ОтправитьPOSTНаСервер
(СтруктураПараметров)
Экспорт

ИмяФайлаОтправки
=
СтруктураПараметров
.ИмяФайлаОтправки;

ИмяФайлаПолучения=
СтруктураПараметров
.ИмяФайлаПолучения;

ЗаголовокHTTP
=
Новый
Соответствие
();

ЗаголовокHTTP.Вставить(«Content-Type»,
«application/x-www-form-urlencoded»);

//ЗаголовокHTTP.Вставить(«Content-Type»,
«application/x-www-form-urlencoded» + Символы.ВК +
Символы.ПС + «charset:UTF-8″);

ФайлОтправки
=
Новый
ЗаписьТекста
(ИмяФайлаОтправки,
КодировкаТекста
.ANSI,
Символы
.ПС,
ЛОЖЬ);

СтрокаПараметров=«»;

Для
каждого
Стрка
из
СтруктураПараметров
.ПараметрыСкрипта
Цикл


СтрокаПараметров
=
СтрокаПараметров
+Стрка.Наименование+

«=»+Стрка.Значение+«&»;

КонецЦикла;

Если
Прав
(СтрокаПараметров,1)=«&»
Тогда


СтрокаПараметров
=
Сред
(СтрокаПараметров,1,СтрДлина(СтрокаПараметров)-1);

КонецЕсли;

ФайлОтправки.Записать(СтрокаПараметров);

ФайлОтправки.Закрыть();

ФайлОтправки
=
Новый
Файл
(ИмяФайлаОтправки);

РазмерФайлаОтправки
=
XMLСтрока
(ФайлОтправки.Размер());

ЗаголовокHTTP.Вставить(«Content-Length»,
РазмерФайлаОтправки
);


НТТР
=
Новый
HTTPСоединение
(СтруктураПараметров.Сервер,,,,);

НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки,СтруктураПараметров.СкриптПриема,ИмяФайлаПолучения,ЗаголовокHTTP);

КонецФункции

Также мы создали функцию, которая заполняет структуру и передает ее в переменную. В качестве сервера используем
«prof1c.kklab.ru», и в качестве скрипта, которому отправляем
post-запрос используем
demo.php.

Пример
php-
скрипта

<?php

 $client_code = $_POST['client_code'];

 $client_code = htmlspecialchars($client_code);

 $client_code = stripslashes($client_code);

 

 if ($client_code==13)

 {

    echo «Код
указан
верно.
Поздравляем!»;

 }

 else

 {

  echo «Указан
неверный код!»
;

 }

?>

Вы уже заметили, что если мы указываем код 13, то php-скрипт возвращает нам строку, о том что код указан верно, если же мы укажем другой код в параметре, передаваемом из 1С – то мы получим значение – указан неверный код.

Скачать: Ссылка на информационную базу с примером

 

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