Как правильно настроить HTTPS-соединение в 1С и исправить ошибку "Couldn't resolve host name"?

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

При интеграции 1С с внешними веб-сервисами по протоколу HTTPS разработчики часто сталкиваются с ошибками сетевого взаимодействия. Одной из самых коварных является ошибка "Couldn't resolve host name". На первый взгляд кажется, что проблема в доступности сайта или настройках DNS, но в контексте 1С причина зачастую кроется в неправильном заполнении параметров объектов HTTPСоединение и ЗащищенноеСоединениеOpenSSL. Разберем детально, как правильно организовать загрузку файлов по защищенному каналу и каких ошибок следует избегать.

Анализ причины ошибки "Couldn't resolve host name"

Рассмотрим ситуацию: разработчик пытается получить XML-файл с адреса, используя полный URL (например, https://example.com/api/data) прямо в конструкторе соединения. В результате платформа выдает ошибку, сообщая, что имя хоста не может быть разрешено. Выясним причину этого поведения.

Объект HTTPСоединение в 1С спроектирован так, что он ожидает в первом параметре только имя домена или IP-адрес. Если передать туда строку, начинающуюся с https:// или содержащую пути после слеша, встроенный механизм (использующий библиотеку curl) попытается найти DNS-запись для всей этой длинной строки. Естественно, такой записи не существует, и система сообщает, что не может «разрешить» (resolve) имя хоста.

Важное правило: протокол (http/https) и путь к конкретному файлу никогда не указываются в первом параметре конструктора HTTPСоединение.

Правильная инициализация HTTPСоединение

Проанализируем структуру конструктора. Для работы с защищенным соединением нам необходимо передать объект ЗащищенноеСоединениеOpenSSL. Посмотрим на правильный алгоритм действий:

  1. Выделяем домен: Из полного адреса https://afk.ua/ua/price/api/file.xml рабочим доменом будет только afk.ua.
  2. Определяем ресурс: Путь внутри сайта будет /ua/price/api/file.xml.
  3. Создаем SSL-контекст: Используем типовые возможности операционной системы для проверки сертификатов.

Рассмотрим пример кода, который решает задачу корректно:


// 1. Подготовка SSL
СертификатыWindows = Новый СертификатыУдостоверяющихЦентровWindows();
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, СертификатыWindows);

// 2. Настройка параметров соединения
Сервер = "afk.ua"; // Только домен!
Порт = 443;        // Стандартный порт для HTTPS

// 3. Создание соединения
HTTPСоединение = Новый HTTPСоединение(Сервер, Порт, , , , , ЗащищенноеСоединение);

// 4. Запрос конкретного ресурса
ПутьКФайлуНаСервере = "ua/price/api/kidway.ua@gmail.com/uts209rz";
ИмяВходящегоФайла = КаталогВременныхФайлов() + "data.xml";

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

Работа с SSL и сертификатами

Использование объекта ЗащищенноеСоединениеOpenSSL является обязательным для работы с https. Разберем подробнее параметры этого объекта, так как от них зависит стабильность подключения.

В большинстве случаев достаточно использовать СертификатыУдостоверяющихЦентровWindows. Это позволяет 1С доверять тем же центрам сертификации, которым доверяет ваша операционная система. Однако существуют специфические ситуации:

Альтернативный метод: КопироватьФайл

Существует более простой способ загрузки данных, который часто игнорируют — метод КопироватьФайл. Разберем его особенности. В отличие от HTTPСоединение, этот метод принимает полный URL.


ПутьИсточник = "https://afk.ua/ua/price/api/kidway.ua@gmail.com/uts209rz";
ПутьПриемник = "D:\price_files\data.xml";

Попытка
    КопироватьФайл(ПутьИсточник, ПутьПриемник);
    Сообщить("Файл скопирован успешно.");
Исключение
    Сообщить("Не удалось скопировать файл: " + ОписаниеОшибки());
КонецПопытки;

Преимущества метода: Минимум кода, автоматическая обработка протокола.

Недостатки и ограничения:

  1. Вы не можете передать специфические HTTP-заголовки (например, User-Agent или Authorization).
  2. Невозможно настроить таймауты ожидания ответа.
  3. Сложнее обрабатывать ошибки сервера (например, если сервер вернет 404 или 500 ошибку в виде HTML-страницы, метод может отработать некорректно или просто вызвать исключение без подробностей).

Рекомендации по отладке и сетевым настройкам

Если после исправления кода ошибка "Couldn't resolve host name" сохраняется, проанализируем сетевое окружение:

1. Контекст выполнения. Помните, что код, выполняющийся «НаКлиенте», использует настройки сети вашего компьютера, а код «НаСервере» — настройки сервера 1С. Часто доступ к внешним сайтам на серверах ограничен политиками безопасности или требует настройки прокси-сервера.

2. Использование прокси. Если ваша организация использует прокси-сервер, объект HTTPСоединение не сможет выйти в интернет без его указания. Используйте объект ИнтернетПрокси:


Прокси = Новый ИнтернетПрокси(Ложь); // Использовать системные настройки или задать вручную
// Прокси.Установить("http", "192.168.1.1", 8080); 
HTTPСоединение = Новый HTTPСоединение(Сервер, Порт, , , Прокси, , ЗащищенноеСоединение);

3. Проверка через утилиты ОС. Чтобы окончательно убедиться, что проблема не в 1С, попробуйте выполнить команду ping afk.ua или использовать curl -v https://afk.ua/... из командной строки сервера. Если curl возвращает данные, а 1С — нет, значит, проблема в параметрах SSL или версии TLS. Современные сайты требуют TLS 1.2 или 1.3, поддержка которых в старых версиях платформы 1С или старых ОС (например, Windows Server 2008) может быть ограничена.

Подводя итог, отметим, что для стабильной работы с SSL в 1С необходимо четко разделять адрес сервера и путь к ресурсу, правильно инициализировать защищенное соединение и учитывать контекст выполнения кода (клиент или сервер).

← На главную