Как правильно настроить подключение через прокси-сервер в 1С:Предприятие 8.3?

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

Работа с внешними API и веб-сервисами — неотъемлемая часть современной разработки на платформе 1С. Однако в корпоративных сетях выход в интернет часто ограничен прокси-сервером. Настройка объекта ИнтернетПрокси кажется тривиальной задачей, но на практике разработчики сталкиваются с неочевидными ошибками, такими как «Не могу установить соединение» или «Proxy Authentication Required». В этой статье мы подробно разберем, как правильно инициализировать прокси-сервер, настроить защищенное соединение и избежать типичных ошибок при типизации данных.

Анализ проблемы: почему стандартный код не всегда работает?

Рассмотрим ситуацию, с которой часто сталкиваются программисты. При попытке установить соединение через прокси код падает в блок Исключение. Разберем типичный фрагмент кода, содержащий ошибки:


ПроксиСервер = Новый ИнтернетПрокси;
ПроксиСервер.Пользователь = "login";
ПроксиСервер.Пароль = "password";
ПроксиСервер.Установить("https", "185.221.100.10", "8080"); 

В данном примере кроются две критические проблемы. Во-первых, порт прокси-сервера передается как строка "8080", хотя метод Установить ожидает тип Число. Во-вторых, жесткое указание протокола "https" может привести к тому, что для других протоколов (например, обычного http) настройки прокси просто не применятся. Выясним, как сделать этот код надежным.

Решение №1: Корректное использование метода Установить

Первым делом проанализируем синтаксис метода Установить. Для того чтобы прокси-сервер работал универсально для всех видов трафика (HTTP, HTTPS, FTP), рекомендуется не указывать конкретный протокол в первом параметре, а передать Неопределено. Также крайне важно следить за типами данных.

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


ПроксиСервер = Новый ИнтернетПрокси;

// Определяем параметры подключения
АдресПрокси = "185.221.100.10";
ПортПрокси = 8080; // Обязательно число!
Логин = "admin";
Пароль = "P@ssw0rd";

// Устанавливаем настройки для всех протоколов разом
// Синтаксис: Установить(<Протокол>, <Адрес>, <Порт>, <Пользователь>, <Пароль>, <НеИспользоватьДляЛокальных>)
ПроксиСервер.Установить(Неопределено, АдресПрокси, ПортПрокси, Логин, Пароль, Ложь);

Важный нюанс: если вы используете метод Установить, параметры Пользователь и Пароль внутри него имеют приоритет над свойствами объекта ПроксиСервер.Пользователь. Поэтому лучше указывать всё внутри одного метода для чистоты кода.

Решение №2: Настройка защищенного соединения (SSL/TLS)

Если ваша задача — подключиться к ресурсу по протоколу HTTPS (например, к API Telegram или государственным сервисам), одного объекта ИнтернетПрокси недостаточно. Нам необходимо правильно настроить ЗащищенноеСоединениеOpenSSL.

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


// 1. Создаем защищенное соединение с параметрами по умолчанию
Защита = Новый ЗащищенноеСоединениеOpenSSL();

// 2. Инициализируем прокси
Прокси = Новый ИнтернетПрокси;
Прокси.Установить(Неопределено, "185.221.100.10", 9790, "user", "pass");

// 3. Создаем соединение, передавая объект прокси в соответствующий параметр
Попытка
    Соединение = Новый HTTPСоединение("api.example.org", 443, , , Прокси, 30, Защита);
    Запрос = Новый HTTPЗапрос("/v1/data");
    Ответ = Соединение.Получить(Запрос);
    Сообщить("Код состояния: " + Ответ.КодСостояния);
Исключение
    Сообщить("Ошибка соединения: " + ОписаниеОшибки());
КонецПопытки;

Глобальная настройка на уровне сервера (inetcfg.xml)

Бывают ситуации, когда прокси-сервер должен использоваться всеми сеансами 1С по умолчанию, и прописывать его в коде каждого модуля неудобно. В этом случае мы можем воспользоваться файлом конфигурации inetcfg.xml. Этот файл располагается в каталоге conf установленной платформы (например, C:\Program Files\1cv8\conf\).

В этом файле можно жестко задать параметры прокси:


<?xml version="1.0" encoding="UTF-8"?>
<InternetProxy
    proxyName="185.221.100.10"
    proxyPort="8080"
    proxyUser="admin"
    proxyPassword="password"
    bypassOnLocal="true"
/>

После внесения изменений в этот файл (на всех серверах кластера) 1С будет автоматически использовать данные настройки, если в коде явно не указан иной объект ИнтернетПрокси.

Особенности работы на платформе Linux

Если ваш сервер 1С работает под управлением Linux, следует помнить, что объект ИнтернетПрокси может игнорировать настройки, заданные в коде. В Linux-среде платформа часто ориентируется на переменные окружения операционной системы. Разберем, какие переменные должны быть определены для пользователя, под которым запущена служба rasd или rphost:

Важно: в Linux регистр имен переменных имеет значение (используйте нижний регистр).

Работа с исключениями: НеИспользоватьПроксиДляАдресов

Проанализируем ситуацию, когда внешние запросы должны идти через прокси, а запросы к внутренним веб-сервисам компании — напрямую. Если попытаться достучаться до локального сервера через внешний прокси, мы получим ошибку. Для решения этой задачи у объекта ИнтернетПрокси есть коллекция НеИспользоватьПроксиДляАдресов.

Посмотрим, как правильно добавить исключения:


Прокси = Новый ИнтернетПрокси;
Прокси.Установить(Неопределено, "185.221.100.10", 8080);

// Добавляем локальные адреса в исключения
Прокси.НеИспользоватьПроксиДляАдресов.Добавить("localhost");
Прокси.НеИспользоватьПроксиДляАдресов.Добавить("127.0.0.1");
Прокси.НеИспользоватьПроксиДляАдресов.Добавить("192.168.*");
Прокси.НеИспользоватьПроксиДляАдресов.Добавить("*.localdomain");

Проблемы с NTLM-аутентификацией

Если ваш прокси-сервер требует доменной авторизации (NTLM), 1С может выдавать ошибку 407 Proxy Authentication Required. Выясним причину: встроенный механизм 1С не всегда корректно проходит многоэтапную авторизацию NTLM. В таких случаях можно попробовать следующие подходы:

  1. Запустить службу сервера 1С от имени доменного пользователя, у которого есть права доступа на прокси.
  2. В коде оставить логин и пароль пустыми, чтобы сработала прозрачная авторизация (актуально для Windows-серверов).
  3. Использовать сторонние утилиты, такие как CNTLM, которые создают локальный HTTP-прокси без авторизации, выступая «прослойкой» между 1С и корпоративным прокси-сервером.

Чек-лист для проверки при ошибках подключения

Если соединение все равно не устанавливается, пройдемся по следующим пунктам:

Применяя эти правила и подходы, мы сможем построить надежную систему взаимодействия 1С с внешними ресурсами даже в условиях сложной сетевой инфраструктуры.

← На главную