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", ИмяФайлаОтвета, СокрЛП(ЗаголовкиЗапросов)); //ответ сайта записан во временный файл
Исключение
Сообщить ("Ошибка при получении файла обмена");
КонецПопытки;
КонецПроцедуры
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла(); //Создаем временный файл и получаем его адрес
Попытка
Соединение=новый 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", ИмяФайлаОтвета, СокрЛП(ЗаголовкиЗапросов)); //ответ сайта записан во временный файл
Исключение
Сообщить ("Ошибка при получении файла обмена");
КонецПопытки;
КонецПроцедуры