Как исправить ошибку «Failure when receiving data from the peer» при отправке HTTPS-запроса из 1C?

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

При интеграции 1С с внешними сервисами по REST API (включая сервисы с документацией Swagger) разработчики используют штатные объекты HTTPСоединение и HTTPЗапрос. Однако при выполнении метода ОтправитьДляОбработки или ВызватьHTTPМетод может возникнуть исключение: «Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Failure when receiving data from the peer».

Рассмотрим пример рабочего кода для отправки JSON-запроса, проанализируем причины возникновения этой ошибки и разберем способы её устранения.

Пример рабочего кода для отправки POST-запроса в JSON

Рассмотрим корректную реализацию формирования и отправки POST-запроса с телом в формате JSON и авторизационными данными.

Сформируем функцию для создания объекта HTTPЗапрос:


Функция HTTPЗапросКСервисуБиллинга()
    
    ТекстЗапроса = "/api/Auth/";    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");
    Заголовки.Вставить("Accept", "application/json");
    Заголовки.Вставить("User-Agent", "1CEnterprise");
    
    Запрос = Новый HTTPЗапрос(ТекстЗапроса, Заголовки);
    
    СтруктураЗапроса = Новый Структура;
    СтруктураЗапроса.Вставить("login", "UserLogin");
    СтруктураЗапроса.Вставить("PasswordMd5", "PasswordHash");
    СтруктураЗапроса.Вставить("Role", "Admin");
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
    
    ТекстJSON = ЗаписьJSON.Закрыть();
    
    Запрос.УстановитьТелоИзСтроки(ТекстJSON);    
    
    Возврат Запрос;
    
КонецФункции

Далее создадим функцию для инициализации защищенного соединения через HTTPСоединение:


Функция HTTPСоединениеБиллинга()
    
    АдресСервера = "example.ru";    
    Таймаут = 10;
    
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС);
    Возврат Новый HTTPСоединение(АдресСервера, 444, , , , Таймаут, ЗащищенноеСоединение);
    
КонецФункции

Разберем процедуру отправки запроса и разбора ответа от веб-сервиса:


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

Причины ошибки «Failure when receiving data from the peer» и способы исправления

Текст ошибки сообщает о том, что удаленный узел или промежуточный сетевой шлюз неожиданно разорвал TCP/TLS-соединение во время передачи или ожидания данных (код ошибки 56 библиотеки libcurl). Проанализируем ключевые причины такого поведения:

  1. Проблемы с прокси-сервером или сетевым экраном. Часто причиной разрыва соединения становится некорректная маршрутизация через корпоративный прокси-сервер или блокировка сетевым экраном. Если запрос работает в утилитах типа Postman, но выдает ошибку в 1С, проверьте сетевые настройки. При необходимости явно передайте объект HTTPПрокси в параметры HTTPСоединение или отключите использование прокси с помощью конструктора Новый HTTPПрокси(Ложь).
  2. Отсутствие заголовка User-Agent. По умолчанию 1С не добавляет заголовок User-Agent при формировании HTTPЗапрос. Некоторые веб-серверы и защитные экраны (WAF/Nginx) сбрасывают соединение, если данный заголовок отсутствует. Рекомендуется явно добавлять его: Заголовки.Вставить("User-Agent", "1CEnterprise").
  3. Некорректное имя сервера. В параметре АдресСервера объекта HTTPСоединение необходимо указывать исключительно имя хоста или IP-адрес (без префикса https:// и без пути /api/...). Указание протокола или пути в адресе сервера нарушает работу SNI при TLS-рукопожатии.
  4. Особенности контекста выполнения (сервер 1С). При выполнении кода на стороне сервера 1С запуск происходит от имени системной службы (например, usr1cv8). Учетная запись службы может иметь отличные от текущего пользователя параметры прокси-сервера и списка доверенных сертификатов ОС.
  5. Проверка и подмена SSL-сертификатов (SSL Inspection). Если в сети используется перехват и проверка SSL-трафика антивирусом или сетевым оборудованием, библиотека OpenSSL платформы 1С может не доверять подмененному сертификату. В этом случае требуется добавить сертификат в хранилище ОС или внести целевой адрес в исключения проверки.
← На главную