Интеграция 1С с внешними облачными сервисами через REST API — задача стандартная, однако при переносе кода из консольных утилит вроде cURL в среду 1С часто возникают сложности. Ошибки вида Server returned nothing или Failure when receiving data from the peer указывают на то, что соединение не может быть установлено на уровне протоколов или сетевой инфраструктуры. Давайте разберем, как правильно реализовать отправку POST-запроса и на что обратить внимание при отладке.
Одной из частых причин ошибок является некорректная передача тела запроса. 1С требует явного указания кодировки и правил обработки байтового порядка. При работе с JSON-данными важно убедиться, что строка сформирована корректно, а методы работы с объектом HTTPЗапрос используются правильно.
Рассмотрим, как правильно подготовить тело запроса:
Данные = Новый Структура;
Данные.Вставить("collection", "myCollection");
Данные.Вставить("database", "1c");
Данные.Вставить("dataSource", "Cluster7");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
ТелоЗапроса = ЗаписьJSON.Закрыть();
Запрос = Новый HTTPЗапрос("/app/endpoint/data/v1/action/findOne", Заголовки);
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
Использование параметра ИспользованиеByteOrderMark.НеИспользовать гарантирует, что к телу запроса не будут добавлены лишние служебные символы BOM, которые некоторые API-серверы воспринимают как повреждение данных.
Работа с современными API требует поддержки актуальных версий протоколов TLS. Ошибки соединения часто возникают из-за того, что объект ЗащищенноеСоединениеOpenSSL не может согласовать протоколы с сервером.
Попробуйте инициализировать соединение без передачи специфических сертификатов, если вы работаете в стандартной серверной среде:
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("data.mongodb-api.com", 443, , , , 60, SSL);
Если это не помогает, проверьте, доступны ли на сервере актуальные корневые сертификаты операционной системы. Также обратите внимание на параметр таймаута: 60 секунд — оптимальное значение для облачных API, чтобы дождаться ответа при медленной сети или задержке рукопожатия TLS.
Заголовки, которые вы копируете из cURL, не всегда требуются в серверных вызовах. Например, заголовок Access-Control-Request-Headers предназначен для браузерных запросов (CORS). Серверные скрипты 1С работают напрямую, поэтому избыточные заголовки могут приводить к неожиданным отказам на стороне API.
Рекомендуем оставить только необходимые заголовки:
Content-Type: application/jsonapi-key: ВАШ_КЛЮЧЕсли код выше выполнен корректно, но ошибка сохраняется, проблема, скорее всего, кроется за пределами 1С — в сетевой инфраструктуре. Проанализируем типичные причины:
PowerShell (команда Invoke-RestMethod) прямо на сервере, где крутится 1С. Если PowerShell также получит отказ — значит, сеть закрыта для исходящих соединений.Если встроенный механизм HTTPСоединение не справляется со сложными настройками прокси или специфическими требованиями SSL, можно воспользоваться системным объектом COMОбъект("WinHttp.WinHttpRequest.5.1"). Он напрямую обращается к библиотекам Windows и часто оказывается более гибким в настройках сетевого взаимодействия.
Помните, что отладка подобных задач всегда требует последовательного исключения факторов: от простоты формирования JSON до проверки доступности порта 443 на уровне операционной системы.