Как автоматизировать скачивание файлов с сайтов с авторизацией через 1С?

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

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

Основы работы с HTTP-запросами и сессиями

Первое, на что стоит обратить внимание — это поддержание сессии. Если вы просто делаете запрос к файлу, сайт может не «узнать» вашу сессию, так как не получил идентификатор авторизации. Рассмотрим использование объекта HTTPСоединение для авторизации.

При использовании стандартных методов важно понимать, что при первой попытке обращения к защищенному ресурсу сервер отправляет заголовки Set-Cookie. Если эти куки не передаются в последующих запросах, авторизация будет отклонена. Если ваш код работает в браузере (после ручного входа), но не работает в 1С, скорее всего, проблема именно в отсутствии обработки Cookie или в необходимости передачи учетных данных непосредственно в конструкторе объекта HTTPСоединение.

Реализация авторизации через HTTPСоединение

Наиболее надежный способ авторизации в 1С при работе с защищенными ресурсами — передача параметров авторизации непосредственно при инициализации соединения. Разберем пример реализации:


Логин = \"ВашЛогин\";
Пароль = \"ВашПароль\";
Сервер = \"www.mysite.com\";

// Создаем соединение с передачей учетных данных
Соединение = Новый HTTPСоединение(Сервер, 443, Логин, Пароль,, 60, Новый ЗащищенноеСоединениеOpenSSL());

// Формируем запрос
АдресРесурса = \"/путь/к/файлу/обновления.zip\";
ИмяВыходногоФайла = \"C:\\Temp\\update.zip\";

// Выполняем скачивание
Попытка
    КопироватьФайл(\"https://\" + Сервер + АдресРесурса, ИмяВыходногоФайла);
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

Обратите внимание: если вы используете HTTPS, обязательно передавайте объект ЗащищенноеСоединениеOpenSSL. В противном случае соединение может быть отклонено из-за отсутствия проверки сертификата безопасности.

Разбор проблем при работе на стороне сервера

Часто встречается ситуация, когда код успешно отрабатывает в терминальной сессии пользователя, но выдает ошибки при выполнении на сервере 1С (в фоновом задании или на сервере приложений). Рассмотрим возможные причины и пути решения:

  1. Контекст пользователя: Сервер 1С (процесс rphost) работает от имени системного пользователя (например, USR1CV8). У этого пользователя нет доступа к настройкам прокси, установленным в профиле текущего пользователя Windows. Если в вашей сети используется прокси-сервер, его настройки необходимо указывать явно в конструкторе HTTPСоединение.
  2. Настройки безопасности и права: Системная учетная запись сервера может быть ограничена в доступе в интернет на уровне файервола. Проверьте правила безопасности Windows Server для пользователя, от имени которого запущен агент сервера 1С.
  3. Сертификаты: Если сайт использует HTTPS, корневые сертификаты должны быть установлены в хранилище доверенных сертификатов на стороне сервера (локальной машины), а не только в хранилище пользователя.

Рекомендации по отладке

Для того чтобы понять, почему происходит сбой, проанализируем следующие шаги:

Следуя этим рекомендациям и правильно настраивая объекты HTTPСоединение, вы сможете автоматизировать загрузку даже со сложных ресурсов, которые требуют предварительной аутентификации.

← На главную