Как правильно прочитать XML-файл с HTTPS-ресурса в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При попытке получения данных с внешних ресурсов через протокол HTTPS многие разработчики сталкиваются с ошибками парсинга, такими как «Extra content at the end of the document». Эта проблема возникает из-за того, что стандартный метод платформы не всегда корректно обрабатывает сетевые потоки при прямом обращении к URL. Давайте разберем, почему это происходит и как выстроить надежный механизм получения данных.

Почему прямое чтение не всегда работает?

Метод ЧтениеXML.ОткрытьФайл() при передаче ему URL-адреса рассчитывает на стабильный поток данных. Однако при работе с HTTPS возникают следующие препятствия:

Решение: использование HTTP-соединения

Чтобы избежать подобных ошибок, рекомендуется использовать связку объектов HTTPСоединение и HTTPЗапрос. Этот подход позволяет сначала полностью загрузить данные в оперативную память или временный файл, и только после проверки успешности соединения приступать к парсингу. Рассмотрим пошаговый алгоритм.

Шаг 1: Подготовка соединения

Для начала необходимо создать объект HTTPСоединение. Важно правильно настроить параметры безопасности, особенно если сервер требует поддержки актуальных протоколов шифрования.


// Настройка защищенного соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("bnr.ro", 443, , , , 60, ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("/nbrfxrates.xml");

Шаг 2: Получение данных

Выполняем запрос и проверяем статус ответа. Если сервер вернул статус 200, значит, данные получены корректно.


Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
    ДанныеXML = Ответ.ПолучитьТелоКакСтроку();
    // Дальнейшая обработка
Иначе
    ВызватьИсключение "Ошибка при получении данных: " + Ответ.КодСостояния;
КонецЕсли;

Шаг 3: Парсинг полученного XML

Теперь, когда у нас есть переменная с XML-данными (или файл на диске), мы можем использовать ЧтениеXML или ПостроительDOM. Это исключит влияние нестабильного сетевого соединения на процесс разбора структуры файла.


Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ДанныеXML);

Построитель = Новый ПостроительDOM;
Документ = Построитель.Прочитать(Чтение);

Рекомендации для повышения надежности

  1. Используйте локальные файлы: Если XML-файл достаточно большой, лучше сначала сохранить его во временный файл на диске с помощью метода Получить(Запрос, ИмяФайла), а затем использовать ЧтениеXML.ОткрытьФайл(ИмяФайла). Это значительно снижает потребление оперативной памяти.
  2. Проверяйте содержимое: Всегда проверяйте, что пришло от сервера. Если вместо XML пришел HTML-код (например, страница 404 или страница с требованием авторизации), парсер выдаст ошибку. Выводите Ответ.ПолучитьТелоКакСтроку() в журнал регистрации при возникновении проблем для отладки.
  3. Настройка тайм-аутов: В конструкторе HTTPСоединение всегда указывайте таймаут (например, 60 секунд), чтобы приложение не «зависало» при медленном ответе внешнего сервера.

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

← На главную