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

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

1С: как передать параметры в HTTP-запросе

Как передать параметры в HTTP-запросе из 1С: строка запроса, заголовки, тело POST, JSON и form-data. Примеры кода, типичные ошибки и проверка результата.

Передача параметров в HTTP-запросе из 1С — типовая задача при интеграции с веб-сервисами, REST API, сайтами и внешними системами учёта. В зависимости от требований API параметры передаются тремя способами: в строке адреса (query string), в заголовках запроса и в теле запроса. Выбор способа определяется не разработчиком 1С, а документацией конкретного сервиса.

Для работы используются объекты встроенного языка: HTTPСоединение, HTTPЗапрос и HTTPОтвет. Параметры в адресной строке добавляются в свойство АдресРесурса объекта HTTPЗапрос, заголовки — в соответствие Заголовки, а данные тела — через методы УстановитьТелоИзСтроки, УстановитьТелоИзДвоичныхДанных или УстановитьИмяФайлаТела.

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

Подготовка: создание соединения и объекта запроса

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

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

Соединение = Новый HTTPСоединение("api.example.ru", 443, , , , 30, ЗащищенноеСоединение);

Запрос = Новый HTTPЗапрос("/v1/orders");

Обратите внимание: адрес ресурса указывается без протокола и домена — только путь на сервере. Именно к этому пути позже добавляются GET-параметры. Таймаут стоит задавать явно, иначе при зависшем сервере сеанс 1С будет ждать слишком долго.

Для HTTPS обязательно передавайте объект ЗащищенноеСоединениеOpenSSL — без него соединение по 443 порту завершится ошибкой. Если сервер использует самоподписанный сертификат, потребуется дополнительная настройка сертификатов на стороне платформы или операционной системы.

Передача параметров в строке запроса (GET)

GET-параметры добавляются к адресу ресурса после знака вопроса в формате имя=значение, несколько параметров разделяются символом &. Это стандартный способ для фильтрации, поиска и пагинации в REST API.

Запрос = Новый HTTPЗапрос("/v1/orders?date_from=2026-01-01&status=new&limit=100");

Ответ = Соединение.Получить(Запрос);

Если значение содержит кириллицу, пробелы или спецсимволы, его необходимо закодировать. В типовых конфигурациях есть функция КодироватьСтроку общего модуля (например, ОбщегоНазначения.КодироватьСтроку в БСП) с указанием способа кодирования URL. При отсутствии БСП используется собственная функция на замене символов.

ЗначениеПараметра = КодироватьСтроку("ООО Ромашка", СпособКодированияСтроки.КодировкаURL);

АдресРесурса = "/v1/search?query=" + ЗначениеПараметра;

Запрос = Новый HTTPЗапрос(АдресРесурса);

Удобный приём — собирать параметры программно из структуры, чтобы не склеивать строку вручную и не забыть разделители:

Параметры = Новый Структура;

Параметры.Вставить("date_from", "2026-01-01");

Параметры.Вставить("status", "new");

СтрокаПараметров = "";

Для Каждого Параметр Из Параметры Цикл

СтрокаПараметров = СтрокаПараметров + ?(СтрокаПараметров = "", "?", "&")

+ Параметр.Ключ + "=" + Параметр.Значение;

КонецЦикла;

Запрос = Новый HTTPЗапрос("/v1/orders" + СтрокаПараметров);

Передача параметров в заголовках

Заголовки используются для служебных параметров: авторизационных токенов, указания формата данных, идентификаторов клиента. В 1С заголовки — это соответствие, где ключ — имя заголовка, значение — строка.

Запрос.Заголовки.Вставить("Authorization", "Bearer eyJhbGciOi...");

Запрос.Заголовки.Вставить("Accept", "application/json");

Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");

Запрос.Заголовки.Вставить("X-Api-Key", "ваш_ключ");

Типовые сценарии: Authorization с токеном Bearer или Basic, Content-Type для указания формата тела, Accept для запроса нужного формата ответа. Некоторые API требуют нестандартные заголовки — их имена всегда указаны в документации сервиса.

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

Передача параметров в теле POST-запроса

POST-параметры передаются в теле запроса. Формат тела определяется API: чаще всего это JSON, реже — application/x-www-form-urlencoded, XML или multipart/form-data для файлов. Формат обязательно дублируется в заголовке Content-Type.

JSON — самый распространённый формат

Для формирования JSON используется объект ЗаписьJSON либо сериализация структуры. Ручная склейка JSON строками — частый источник ошибок с кавычками и экранированием, поэтому лучше использовать штатные средства.

ЗаписьJSON = Новый ЗаписьJSON;

ЗаписьJSON.УстановитьСтроку();

ЗаписьJSON.ЗаписатьНачалоОбъекта();

ЗаписьJSON.ЗаписатьИмяСвойства("number");

ЗаписьJSON.ЗаписатьЗначение("А-00125");

ЗаписьJSON.ЗаписатьИмяСвойства("date");

ЗаписьJSON.ЗаписатьЗначение("2026-01-15");

ЗаписьJSON.ЗаписатьИмяСвойства("amount");

ЗаписьJSON.ЗаписатьЗначение(15400.50);

ЗаписьJSON.ЗаписатьКонецОбъекта();

ТелоJSON = ЗаписьJSON.Закрыть();

Запрос = Новый HTTPЗапрос("/v1/orders");

Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");

Запрос.УстановитьТелоИзСтроки(ТелоJSON, КодировкаТекста.UTF8);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Метод ОтправитьДляОбработки соответствует HTTP-методу POST. Для PUT и DELETE используются методы Записать и Удалить объекта соединения, а для произвольного метода — ВызватьHTTPМетод.

Формат x-www-form-urlencoded

Некоторые API (например, сервисы авторизации по OAuth 2.0) требуют параметры в теле в том же виде, что и GET-параметры: ключ=значение&ключ2=значение2. Тело формируется строкой с обязательным кодированием значений.

Тело = "grant_type=client_credentials&client_id=my_app&scope=read";

Запрос = Новый HTTPЗапрос("/oauth/token");

Запрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");

Запрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Передача файлов и двоичных данных

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

bsl
Запрос = Новый HTTPЗапрос("/v1/upload");
Запрос.Заголовки.Вставить("Content-Type", "application/octet-stream");
Запрос.УстановитьИмяФайлаТела("C:\\temp\\invoice.pdf");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Как выбрать способ передачи параметров

Способ определяется документацией API, но общая логика такова: идентификаторы и фильтры при чтении данных — в query string, данные для создания и изменения — в теле запроса, авторизация — в заголовках. Если сервис принимает параметры несколькими способами, предпочтителен тот, что описан в примерах документации.

Сравнение вариантов

Query string (GET)

Фильтры, поиск, пагинация при чтении данных. Ограничение: длина URL ограничена сервером, данные видны в логах.

Заголовки

Токены, ключи API, указание форматов. Не подходит для бизнес-данных запроса.

Тело JSON

Создание и изменение объектов, сложные вложенные структуры. Требует корректного Content-Type.

form-urlencoded

OAuth-авторизация и простые формы. Неудобен для вложенных структур и массивов.

Двоичные данные / multipart

Передача файлов. Тело multipart формируется вручную, что требует аккуратности с boundary.

Маршрут решения

Как выбрать действие

API возвращает 400 Bad RequestПроверьте кодирование значений в URL и соответствие Content-Type фактическому формату тела
API возвращает 401 или 403Проверьте заголовок Authorization, срок действия токена и права ключа API
Сервер не видит параметры, хотя они переданыУбедитесь, что параметры переданы там, где их ждёт API: в адресе, а не в теле, или наоборот
Ответ приходит в неправильной кодировкеЧитайте тело через ПолучитьТелоКакСтроку() с явным указанием кодировки UTF-8

Проверка результата и чтение ответа

После выполнения запроса первым делом анализируется код состояния: Ответ.КодСостояния. Значения 200–299 означают успех, 400 — ошибка в параметрах, 401/403 — проблема авторизации, 404 — неверный адрес ресурса, 500 — ошибка на стороне сервера. Не полагайтесь на то, что успешное выполнение метода без исключения означает успех операции: HTTP-ошибка не вызывает исключение в 1С.

Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Если Ответ.КодСостояния = 200 Тогда

ЧтениеJSON = Новый ЧтениеJSON;

ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);

ЧтениеJSON.Закрыть();

Иначе

ВызватьИсключение "Ошибка API: " + Ответ.КодСостояния

+ " " + Ответ.ПолучитьТелоКакСтроку();

КонецЕсли;

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

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

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

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

200–299, тело содержит ожидаемые данные

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

400, 401, 404, 500 — читать тело ошибки

Содержимое ответа
Норма

JSON разбирается без исключения, структура соответствует документации

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

HTML-страница ошибки вместо JSON — неверный адрес или прокси

Параметры на стороне сервера
Норма

Сервер видит все переданные значения корректно, включая кириллицу

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

Кракозябры или пустые значения — проблема кодирования

Типичные ошибки при передаче параметров

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

Типичные ошибки
01
Кириллица в URL без кодирования — сервер возвращает 400 или искажённые значения
02
Несоответствие Content-Type реальному формату тела — сервер не разбирает параметры
03
Передача параметров в теле при GET-запросе — многие серверы игнорируют тело GET
04
Ошибка считается по отсутствию исключения, а не по коду состояния — ошибки API пропускаются
05
Ручная склейка JSON строками — битый JSON из-за кавычек и спецсимволов в значениях
06
Лишний протокол и домен в адресе ресурса HTTPЗапрос — ошибка маршрутизации запроса

Отдельно отметим проблему с типами данных: числа и даты в JSON должны соответствовать ожиданиям API. Дата «15.01.2026» вместо ISO-формата «2026-01-15» — частая причина отказа сервера. Всегда сверяйте формат с примерами в документации.

Ещё одна тонкость — редиректы. Платформа 1С не всегда автоматически следует перенаправлениям (коды 301, 302): если сервер вернул редирект, нужно прочитать заголовок Location из ответа и выполнить запрос по новому адресу.

Перед тем как отлаживать запрос в 1С, выполните его в Postman или curl с теми же параметрами. Если там запрос работает, а в 1С нет — проблема в кодировании или заголовках; если не работает и там — в самих параметрах или авторизации.
ПЗ
Практическое замечание

Ограничения и безопасность

Токены и ключи API нельзя хранить открытым текстом в коде общих модулей — они попадут в хранилище конфигурации и выгрузки. Используйте безопасное хранилище (в БСП — ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище) или константы с ограниченным доступом.

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

Помните про лимиты внешних API: многие сервисы ограничивают частоту запросов. При массовой обработке данных добавляйте паузы между вызовами и обрабатывайте код 429 (слишком много запросов), иначе ключ API могут временно заблокировать.

Итог

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

GET-параметры идут в адресе ресурса с кодированием значений, POST-параметры — в теле с корректным Content-Type, авторизация — в заголовках. Успех проверяйте по коду состояния, а тело ошибки всегда читайте: сервер сам подскажет причину отказа.

Частые вопросы

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

Значение нужно закодировать функцией КодироватьСтроку() со способом КодировкаURL (в конфигурациях на БСП доступна через общие модули). Некодированная кириллица приводит к ошибке 400 или искажённым данным на сервере.

Чем отличается УстановитьТелоИзСтроки от УстановитьИмяФайлаТела?

Первый метод помещает в тело строку из памяти и подходит для JSON и коротких данных. Второй отправляет файл с диска без загрузки в память — используйте его для больших файлов, чтобы не получить переполнение памяти сеанса.

Сервер возвращает 200, но данных в ответе нет. Что проверить?

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

Как передать массив значений в параметрах запроса?

Зависит от API: одни сервисы принимают повторяющийся параметр (id=1&id=2&id=3), другие — JSON-массив в теле, третьи — значения через запятую. Точный формат смотрите в документации; универсального стандарта здесь нет.

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

На сервере 1С — да, это основной сценарий. На тонком клиенте объекты HTTP доступны с ограничениями, а в веб-клиенте прямые HTTP-запросы из встроенного языка не выполняются. Правильная архитектура — вызывать серверные процедуры, которые выполняют запрос на стороне сервера.

Как отладить, что именно ушло на сервер?

Выведите в журнал регистрации адрес ресурса, все заголовки и тело запроса перед отправкой (кроме токенов). Для полного контроля можно временно направить запрос на тестовый сервис-эхо, который возвращает принятые данные, и сравнить с ожидаемым.