Как программно отправить HTTP POST-запрос с телом в формате JSON в 1С 8.3?

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

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

Шаг 1. Инициализация защищенного соединения

Прежде чем приступать к отправке запроса, нам необходимо определить, требуется ли использование протокола HTTPS. Большинство современных API работают именно через защищенный протокол. Проанализируем ситуацию: если адрес сервера начинается с https://, нам потребуется создать объект ЗащищенноеСоединениеOpenSSL. Рассмотрим, как это сделать правильно, чтобы избежать ошибок проверки сертификатов на стороне сервера.

Для создания типового защищенного соединения воспользуемся следующим кодом:


ИспользованиеSSL = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаWindows(), 
    Новый ВалидацияСертификатаПеречнемСертификатовПроверяющихЦентровWindows()
);

Данный подход позволяет использовать системные хранилища сертификатов Windows для проверки подлинности сервера. Если же требования безопасности позволяют игнорировать проверку сертификата (что не рекомендуется для рабочих систем, но удобно при отладке), можно передать Неопределено в параметры конструктора.

Шаг 2. Настройка HTTP-соединения

Теперь разберем процесс установки связи с сервером. Нам потребуется объект HTTPСоединение. Важно помнить, что в параметрах этого объекта указывается только базовый адрес сервера (хост) без указания протокола и пути. Например, если целевой URL — https://api.example.com/v1/data, то хостом будет api.example.com.

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


Сервер = "api.example.com";
Порт = 443; // Стандартный порт для HTTPS
Таймаут = 30; // Время ожидания в секундах

Соединение = Новый HTTPСоединение(
    Сервер, 
    Порт, 
    Логин, 
    Пароль, 
    Proxy, 
    Таймаут, 
    ИспользованиеSSL
);

Шаг 3. Формирование тела запроса в формате JSON

Одним из самых ответственных этапов является подготовка данных. Платформа 1С предоставляет мощные инструменты для работы с JSON. Мы не рекомендуем формировать строку запроса вручную с помощью конкатенации, так как это чревато ошибками в структуре (пропущенные кавычки, неправильная кодировка спецсимволов). Вместо этого рассмотрим использование объектов ЗаписьJSON и СериализаторXDTO (или просто соответствий и массивов).

Посмотрим на пример формирования сложной структуры данных:


ДанныеДляОтправки = Новый Соответствие;
ДанныеДляОтправки.Вставить("id", "123");
ДанныеДляОтправки.Вставить("наименование", "Товар №1");

Параметры = Новый Массив;
Параметры.Добавить("Срочно");
Параметры.Добавить("Хрупкое");
ДанныеДляОтправки.Вставить("теги", Параметры);

ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);

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

В данном примере мы использовали Соответствие, которое автоматически преобразуется в объект JSON, и Массив, преобразуемый в массив JSON. Это гарантирует валидность итоговой строки СтрокаЗапроса.

Шаг 4. Подготовка и отправка HTTP-запроса

После того как соединение установлено и тело сформировано, необходимо создать объект HTTPЗапрос. Здесь мы указываем относительный путь к ресурсу (endpoint) и обязательно прописываем заголовки (Headers). Для передачи JSON критически важно установить заголовок Content-Type в значение application/json, иначе сервер может не понять формат входящих данных.

Разберем по шагам настройку запроса:

  1. Создаем объект HTTPЗапрос, указывая путь к методу API.
  2. Устанавливаем заголовки через метод Заголовки.Вставить().
  3. Помещаем подготовленную строку JSON в тело запроса.

АдресРесурса = "/v1/data";
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.Заголовки.Вставить("Accept", "application/json");

// Помещаем данные в тело
Запрос.УстановитьТелоИзСтроки(СтрокаЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

// Выполняем отправку
Попытка
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Исключение
    ЗаписьЖурналаРегистрации("Ошибка_HTTP", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
    Возврат;
КонецПопытки;

Шаг 5. Обработка ответа сервера

Получив объект HTTPОтвет, мы должны проанализировать код состояния (Status Code). Код 200 (OK) или 201 (Created) обычно означает успех. Коды 4xx говорят об ошибке в параметрах запроса, а 5xx — о проблемах на стороне сервера.

Проанализируем содержимое ответа. Обычно сервер возвращает результат также в формате JSON. Для его десериализации в объекты 1С (Структуры или Соответствия) используем ЧтениеJSON.


КодСостояния = Ответ.КодСостояния;
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

Если КодСостояния = 200 Тогда
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
    Результат = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // Теперь можем работать с данными
    Сообщить("Успешно! ID объекта: " + Результат["id"]);
Иначе
    Сообщить("Ошибка при отправке! Код: " + КодСостояния);
    Сообщить("Текст ошибки: " + ТекстОтвета);
КонецЕсли;

Дополнительные рекомендации при работе с API

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

Таким образом, мы рассмотрели полный цикл работы с HTTP POST запросами в 1С. Использование встроенных объектов HTTPСоединение и ЗаписьJSON позволяет создавать надежные и быстрые интеграционные решения, соответствующие современным стандартам веб-разработки.

← На главную