Back to top

HTTP-соединение в 1С

Опубликовано e-1c@mail.ru - пн, 04/24/2017 - 10:13

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

Рассмотрим пример, когда нужно получить с сайта в 1С некий файл. При этом на сайте есть авторизация и cookies.

Перед тем как писать процедуру соединения с сайтом в 1С необходимо определить, какие команды понимает сайт и как он на них реагирует. В моем случае соединение происходило к скрипту по адресу http://vashsite.ru/1_c/1c_exchange.php и проходило в 2 этапа:

Авторизация: передавались параметры type=sale и mode=checkauth. Полный адрес запроса с параметрами выглядел так: http://vashsite.ru/1_c/1c_exchange.php?type=sale&mode=checkauth. Если логин и пароль правильные, то сайт передавал ответ в виде файла со следующим содержанием:

        sucсess
        Имя cookies
        Значение cookies

Запрос данных: передавались параметры type=sale и mode=query. Полный адрес запроса с параметрами выглядел так: http://vashsite.ru/1_c/1c_exchange.php?type=sale&mode=query. Также должны быть переданы имя и значение cookies. В ответ сайт присылал файл с необходимыми данными.

Теперь опишем процедуру соединения с сайтом в 1С

Процедура ПолучитьФайлЗаказа ()
 
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла(); //Создаем временный файл и получаем его адрес
 
Попытка
 
Соединение=новый HTTPСоединение("vashsite.ru", 80,Логин, Пароль); //Подключаемся к серверу, порт 80 - стандартный, логин и пароль нало указать
Соединение.Получить("1_c/1c_exchange.php?type=sale&mode=checkauth", ИмяФайлаОтвета); //авторизуемся, ответ сайта будет помещен во временный файл
 
Исключение
 
Сообщить ("Связь с сервером не установлена");
 
КонецПопытки;
 
//Читаем файл с ответом сайта
ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
 
Если ФайлОтвета.Существует() Тогда
 
ТекстОтвета = Новый ТекстовыйДокумент();
ТекстОтвета.Прочитать(ИмяФайлаОтвета);
 
Если ТекстОтвета.КоличествоСтрок()>0 Тогда
 
ОтветСервера = ТекстОтвета.ПолучитьТекст();
 
Иначе
 
СтрокаСообщенияПользователю = СтрокаСообщенияПользователю + Символы.ПС + "Получение данных с сервера: Получен пустой ответ сервера.";
 
КонецЕсли;
 
Иначе
 
СтрокаСообщенияПользователю = СтрокаСообщенияПользователю + Символы.ПС + "Получение данных с сервера: Ответ сервера не получен.";
 
КонецЕсли;
 
//Читаем cookies и формируем из них строку, которая будет в дальнейшем передаваться на сайт
КукиИмя            = СтрПолучитьСтроку(ОтветСервера, 2);
КукиЗначение       = СтрПолучитьСтроку(ОтветСервера, 3);
ЗаголовкиЗапросов = "Cookie: " + КукиИмя + "=" + КукиЗначение;
 
//создаем еще один временный файл, туда будут помещены данные, переданные сайтом
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
 
// Запрашиваем данные, передаем параметры запроса и строку с cookies
Попытка
 
Соединение.Получить("1_c/1c_exchange.php?type=sale&mode=query", ИмяФайлаОтвета, СокрЛП(ЗаголовкиЗапросов)); //ответ сайта записан во временный файл
 
Исключение
 
Сообщить ("Ошибка при получении файла обмена");
 
КонецПопытки;
 
КонецПроцедуры