При интеграции 1С с веб-сервисами и сторонними системами часто возникает задача получить данные из Интернета (текстовый файл, JSON или XML) и сразу обработать их в оперативной памяти без записи промежуточных файлов на диск. Рассмотрим, какие возможности для этого предоставляют различные версии платформы 1С:Предприятие и системные объекты ОС.
Разберем различия в работе протокола HTTP между версиями платформ 8.2 и 8.3:
HTTPСоединение в версии 8.2 не позволяет принимать содержимое ответа напрямую в переменную контекста. Метод Получить() строго требует указания пути к выходному файлу на диске. Поэтому получить данные сразу в ОЗУ только средствами 8.2 невозможно.HTTPЗапрос и HTTPОтвет. Метод Получить() объекта HTTPСоединение возвращает объект HTTPОтвет, из которого данные легко считываются прямо в оперативную память.Посмотрим на пример работы с HTTP напрямую в ОЗУ на платформе 1С 8.3:
Соединение = Новый HTTPСоединение("example.com");
Запрос = Новый HTTPЗапрос("/data.txt");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ТекстФайла = Ответ.ПолучитьТелоКакСтроку("UTF-8");
КонецЕсли;
Если решение разрабатывается на базе платформы 1С 8.2 и требуется избежать создания временных файлов, проанализируем использование системных COM-объектов ОС Windows.
Для загрузки текстовых данных следует обращать внимание на используемые свойства COM-объекта:
Content-Type (text/xml или application/xml). Если запрашивается обычный текстовый файл, обращение к ResponseXML.XML вернет пустую строку.Рассмотрим пример загрузки текстового файла в строку через COM-объект WinHttp.WinHttpRequest.5.1:
СтрокаURL = "http://example.com/file.txt";
HTTP = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
HTTP.Open("GET", СтрокаURL, Ложь);
Попытка
HTTP.Send();
Если HTTP.Status = 200 Тогда
ТекстВПамяти = HTTP.ResponseText;
Иначе
Предупреждение("Не удалось получить данные. Код ответа: " + HTTP.Status);
КонецЕсли;
Исключение
Сообщить("Ошибка при выполнении HTTP-запроса: " + ОписаниеОшибки());
КонецПопытки;
Выясним, какие COM-объекты лучше использовать в зависимости от задачи:
WinHttp.WinHttpRequest.5.1 — наиболее надежный объект для решения сетевых задач в Windows. Он позволяет гибко настраивать таймауты, заголовки запроса и параметры работы с SSL/HTTPS.MSXML2.ServerXMLHTTP.6.0 — оптимизирован для серверной работы и многопоточной среды, устойчив при вызове из фоновых заданий 1С.Microsoft.XMLHTTP — устаревший объект, созданный для работы в клиентских сценариях и браузерах; может непредсказуемо кэшировать запросы на стороне сервера.Обратите внимание: использование системных COM-объектов работает исключительно в операционной системе Windows. Если сервер 1С:Предприятия функционирует под управлением ОС Linux, вызов COM-объектов приведет к ошибке. Для кроссплатформенной работы на платформе 8.2 без создания файлов на диске единственным решением является использование внешних компонент (Native API), либо переход на платформу 1С 8.3.