К статье
Практический материал

Разработка и Конфигурация · 11 мин

Что такое HTTP-запрос в 1С и как с ним работать

HTTP-запрос в 1С: что это, зачем нужен, как отправить GET и POST через HTTPСоединение, обработать ответ, коды ошибок и типичные проблемы интеграции.

HTTP-запрос в 1С — это обращение из прикладного кода платформы «1С:Предприятие» к внешнему серверу по протоколу HTTP или HTTPS. С его помощью конфигурация обменивается данными с сайтами, REST API, веб-сервисами, банками, службами доставки, системами электронного документооборота и другими программами. По сути, 1С выступает в роли клиента: формирует запрос, отправляет его по сети и получает ответ — обычно в формате JSON, XML или в виде файла.

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

Типовые сценарии использования: получение курсов валют, отправка заказов на сайт, обмен статусами с CRM, загрузка прайсов, проверка контрагентов через внешние сервисы, передача данных в мобильное приложение. Понимание того, как устроен запрос и ответ, помогает быстро находить причины ошибок интеграции и не зависеть от «магических» настроек.

Из чего состоит HTTP-запрос

Любой HTTP-запрос независимо от языка программирования включает четыре элемента. Первый — метод: GET для получения данных, POST для отправки, PUT и PATCH для обновления, DELETE для удаления. Второй — адрес ресурса (URL), который в 1С указывается отдельно от сервера: например, сервер api.example.ru, а ресурс /v1/orders.

Третий элемент — заголовки (headers). Это служебные пары «имя-значение»: Content-Type сообщает формат тела запроса, Authorization передаёт токен доступа, Accept указывает, какой формат ответа ожидается. Четвёртый элемент — тело запроса: строка JSON, XML, двоичные данные файла или параметры формы. У GET-запросов тела обычно нет, параметры передаются прямо в адресе после знака вопроса.

Какие объекты платформы используются

Работа строится по трёхзвенной схеме. Сначала создаётся HTTPСоединение — в конструктор передаются сервер, порт, учётные данные, прокси, таймаут и объект защищённого соединения ЗащищенноеСоединениеOpenSSL для HTTPS. Затем формируется HTTPЗапрос: указывается адрес ресурса, заполняются заголовки, устанавливается тело методами УстановитьТелоИзСтроки(), УстановитьТелоИзДвоичныхДанных() или УстановитьИмяФайлаТела().

Отправка выполняется методом соединения: Получить() для GET, ОтправитьДляОбработки() для POST, Записать() для PUT, Удалить() для DELETE либо универсальным ВызватьHTTPМетод(). Результат — объект HTTPОтвет, из которого читают код состояния (КодСостояния), заголовки и тело методом ПолучитьТелоКакСтроку() или ПолучитьТелоКакДвоичныеДанные().

bsl
Соединение = Новый HTTPСоединение("api.example.ru", 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/orders");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки("{""number"":""0001""}");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;

Как отправить GET-запрос и получить данные

GET подходит, когда нужно только прочитать данные, ничего не меняя на сервере: курсы валют, остатки, статус документа. Параметры добавляются в адрес ресурса через ? и &, например /api/rates?date=2026-01-15. Значения параметров, содержащие кириллицу или спецсимволы, нужно кодировать — для этого есть функции работы со строками URL, иначе сервер может вернуть ошибку или искажённые данные.

Ответ обычно приходит в JSON. В 1С его разбирают через ПрочитатьJSON с чтением ЧтениеJSON, получая соответствие или структуру. Перед разбором обязательно проверяйте код состояния: пытаться парсить тело при ошибке 404 или 500 бессмысленно — там либо пусто, либо HTML-страница ошибки.

Порядок отправки GET-запроса
  1. 1
    Создайте HTTPСоединение с указанием сервера, порта и защищённого соединения для HTTPS
  2. 2
    Сформируйте HTTPЗапрос с адресом ресурса и нужными параметрами
  3. 3
    Добавьте заголовки авторизации, если сервис их требует
  4. 4
    Вызовите метод Получить() и сохраните результат в переменную
  5. 5
    Проверьте КодСостояния: 200 — успех, прочие значения — обработка ошибки
  6. 6
    Разберите тело ответа через ЧтениеJSON или ЧтениеXML

Как отправить POST-запрос с телом

POST применяется, когда данные нужно передать на сервер: создать заказ, отправить файл, зарегистрировать событие. Ключевое отличие от GET — наличие тела. Самая частая ошибка здесь — неверный заголовок Content-Type: если вы отправляете JSON, заголовок должен быть application/json, а не text/plain и не application/x-www-form-urlencoded. Многие API молча отклоняют запросы с неправильным типом содержимого.

Для передачи файлов используют либо двоичные данные в теле, либо формат multipart/form-data — его в 1С приходится собирать вручную, формируя границы (boundary) и секции. Если файл большой, лучше использовать УстановитьИмяФайлаТела(), чтобы не загружать содержимое целиком в память сервера 1С.

Коды ответа и обработка ошибок

Сервер всегда возвращает числовой код состояния. Значения 2xx означают успех: 200 — обычный успешный ответ, 201 — ресурс создан, 204 — успех без тела. Коды 3xx — перенаправления, и платформа по умолчанию не всегда следует редиректам автоматически, это нужно учитывать. Коды 4xx — ошибки на стороне 1С как клиента: 400 — неверный запрос, 401 — нет авторизации, 403 — доступ запрещён, 404 — ресурс не найден. Коды 5xx — сбой на стороне сервера, здесь имеет смысл повторить запрос позже.

Отдельный класс проблем — исключения на уровне соединения: сервер недоступен, неверный сертификат, истёк таймаут. Они перехватываются конструкцией Попытка...Исключение...КонецПопытки. В продуктивных интеграциях принято логировать адрес, код ответа и текст ошибки в журнал регистрации или в специальный регистр — без этого диагностика «почему вчера не выгрузились заказы» превращается в гадание.

Контрольные точки

Как проверить результат запроса

Код состояния ответа
Норма

200, 201 или 204 — запрос обработан

Тревожный признак

4xx — ошибка в запросе или авторизации; 5xx — сбой сервера

Тело ответа
Норма

Валидный JSON или XML, который разбирается без исключения

Тревожный признак

Пустое тело или HTML-страница ошибки вместо данных

Время выполнения
Норма

Ответ приходит за секунды, в пределах таймаута

Тревожный признак

Запрос зависает и падает по таймауту — сеть или сервер недоступны

Безопасность: HTTPS, токены и права

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

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

Типичные ошибки и ограничения

Частые проблемы не связаны с самим протоколом, а с окружением. На сервере 1С может быть закрыт доступ в интернет файрволом — запрос «висит» и падает по таймауту. Если в компании используется прокси, его параметры нужно передать в конструктор соединения, иначе запросы не уйдут. Ещё одна ловушка — кодировка: тело ответа в UTF-8, прочитанное как windows-1251, превращает кириллицу в «кракозябры».

Учитывайте и архитектурное ограничение: длительный HTTP-запрос, выполняемый в фоне проведения документа или в интерактивной форме, блокирует работу пользователя. Для обменов, которые занимают заметное время, используйте фоновые задания, а сами запросы снабжайте разумным таймаутом — например, десятки секунд, а не бесконечное ожидание по умолчанию.

Типичные ошибки
01
Не проверять КодСостояния и сразу разбирать тело — при ошибке сервера получаете исключение при парсинге
02
Неверный Content-Type тела — API отклоняет запрос с кодом 400 или 415
03
Пароль или токен зашит в код модуля — секрет доступен всем разработчикам и попадает в хранилище
04
Нет таймаута и обработки исключений — при недоступном сервере сеанс пользователя зависает
05
Кодировка ответа не указана — кириллица в данных превращается в нечитаемые символы

FAQ

Чем HTTP-запрос отличается от веб-сервиса в 1С?

HTTP-запрос — это когда 1С сама выступает клиентом и обращается к чужому серверу через HTTPСоединение. Веб-сервис — обратная ситуация: вы публикуете в конфигурации объект «Web-сервис» или HTTP-сервис, и внешние системы вызывают 1С. Для обмена часто используются оба механизма одновременно.

Можно ли отправить HTTP-запрос без программирования?

Штатных «кнопочных» средств для произвольных запросов в типовых конфигурациях нет — нужен код на встроенном языке. Однако многие типовые обмены (с сайтом, банком, ЭДО) уже реализованы внутри конфигурации, и пользователю достаточно заполнить настройки подключения.

Почему запрос из 1С не проходит, а в браузере тот же адрес открывается?

Браузер и сервер 1С работают в разных сетевых условиях. Проверьте: доступ в интернет с сервера 1С, настройки прокси в конструкторе соединения, сертификат для HTTPS и заголовки — некоторые API требуют User-Agent или токен, который браузер подставляет автоматически.

Как передать файл через HTTP-запрос?

Два пути: прочитать файл в двоичные данные и установить тело методом УстановитьТелоИзДвоичныхДанных(), либо указать путь методом УстановитьИмяФайлаТела() — второй вариант экономит память при больших файлах. Если API требует multipart/form-data, тело с границами секций формируют вручную.

Что делать при ошибке сертификата при HTTPS-соединении?

Ошибка означает, что платформа не смогла проверить сертификат сервера. Убедитесь, что сертификат сервера действителен, а цепочка доверенных центров установлена в системе. Для тестовых стендов с самоподписанными сертификатами настраивают параметры ЗащищенноеСоединениеOpenSSL, но в продуктиве отказываться от проверки небезопасно.

Как отладить запрос, если сервер возвращает ошибку?

Зафиксируйте в журнале полный адрес ресурса, заголовки, тело запроса, код ответа и тело ответа. Затем повторите тот же запрос через внешний инструмент тестирования API: если там он работает, проблема в формировании запроса в коде; если нет — в данных или правах доступа.

Итог

Что важно запомнить

HTTP-запрос в 1С строится из трёх объектов: HTTPСоединение, HTTPЗапрос и HTTPОтвет. Всегда проверяйте код состояния перед разбором ответа, задавайте таймаут и правильный Content-Type, используйте HTTPS и не храните токены в открытом виде. Длительные обмены выносите в фоновые задания, а ошибки — в журнал для диагностики.