Как программно отправить HTTP-запрос и обработать JSON в 1С 8.3

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

В современной разработке на платформе 1С:Предприятие 8.3 интеграция с внешними веб-сервисами стала повседневной задачей. Чаще всего это реализуется через HTTP-запросы. В данной статье мы подробно разберем, как правильно настроить соединение с сервером, сформировать тело запроса в формате JSON, отправить его и корректно обработать полученный ответ. Мы проанализируем основные объекты платформы, такие как HTTPСоединение, HTTPЗапрос и HTTPОтвет, а также выясним причины типичных ошибок при работе с протоколом HTTPS.

Шаг 1. Создание и настройка объекта HTTPСоединение

Первым делом нам необходимо установить связь с удаленным сервером. Для этого в 1С используется объект HTTPСоединение. Важно помнить, что при инициализации соединения мы указываем только базовый адрес сервера (хост), а не полный путь к ресурсу.

Рассмотрим подробнее параметры конструктора. Если сервер использует защищенное соединение (HTTPS), нам обязательно потребуется создать объект ЗащищенноеСоединениеOpenSSL. Разберем это на примере:


// Настройка защищенного соединения для HTTPS
Защита = Новый ЗащищенноеСоединениеOpenSSL();

// Указываем адрес сервера без префикса http/https и без путей
Сервер = "api.example.com"; 
Порт = 443; // Стандартный порт для HTTPS

// Создаем объект соединения
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, Защита);

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

Шаг 2. Подготовка JSON-тела запроса

Большинство современных REST-сервисов принимают данные в формате JSON. Для формирования такой строки в 1С удобнее всего использовать объекты Структура и ЗаписьJSON. Посмотрим на пример создания структуры данных для отправки:


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

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

Этот метод гарантирует, что все специальные символы будут экранированы правильно, а типы данных (числа, булево, строки) будут соответствовать стандарту JSON. Выясним причину, почему не стоит собирать JSON "вручную" через конкатенацию строк: любая лишняя запятая или кавычка сделает ваш запрос невалидным для принимающей стороны.

Шаг 3. Формирование HTTP-запроса и установка заголовков

Теперь создадим сам объект запроса и укажем путь к конкретному методу API (endpoint). Очень важно правильно установить заголовки запроса, в частности Content-Type, чтобы сервер понимал, что мы прислали именно JSON.

Разберем по шагам процесс настройки объекта HTTPЗапрос:


// Указываем путь к ресурсу относительно корня сервера
ПутьКРесурсу = "/v1/products/create";
Запрос = Новый HTTPЗапрос(ПутьКРесурсу);

// Устанавливаем заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
// Если требуется авторизация по токену
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);

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

Обратите внимание на параметр ИспользованиеByteOrderMark.НеИспользовать. Многие веб-серверы некорректно обрабатывают метку BOM в начале строки, что приводит к ошибкам парсинга. Мы рекомендуем всегда отключать BOM при отправке строковых данных.

Шаг 4. Отправка запроса и анализ ответа сервера

Когда объект запроса готов, мы вызываем метод соединения. В зависимости от типа операции это может быть ВызватьHTTPМетод, ОтправитьДляОбъекта или специальные методы типа Получить (GET) и Отправить (POST).

Рассмотрим пример отправки POST-запроса и обработки результата:


Попытка
    Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
    
    // Проанализируем код состояния
    КодСостояния = Ответ.КодСостояния;
    Если КодСостояния = 200 ИЛИ КодСостояния = 201 Тогда
        // Успех, читаем тело ответа
        ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        
        // Разберем JSON ответа в структуру 1С
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(ТелоОтвета);
        РезультатСтуктура = ПрочитатьJSON(Чтение);
        Чтение.Закрыть();
        
        Сообщить("Запрос выполнен успешно! ID записи: " + РезультатСтуктура.id);
    Иначе
        Сообщить("Ошибка сервера. Код ответа: " + КодСостояния);
        Сообщить("Текст ошибки: " + Ответ.ПолучитьТелоКакСтроку());
    КонецЕсли;
Исключение
    // Обработка сетевых ошибок (сервер недоступен, ошибка SSL и т.д.)
    Сообщить("Произошла ошибка при установке соединения: " + ОписаниеОшибки());
КонецПопытки;

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

При работе с HTTP в 1С часто возникают ситуации, требующие особого внимания. Рассмотрим подробнее наиболее важные из них:

  1. Проверка сертификатов SSL: Если вы подключаетесь к серверу с самоподписанным сертификатом, 1С может выдать ошибку. В этом случае в объекте ЗащищенноеСоединениеOpenSSL необходимо настроить проверку сертификатов, либо (в целях отладки) использовать параметры для игнорирования ошибок проверки, хотя это не рекомендуется для рабочих систем.
  2. Работа через прокси-сервер: Если ваш сервер 1С находится за корпоративным прокси, параметры прокси нужно передать в конструктор HTTPСоединение. Используйте для этого объект ИнтернетПрокси.
  3. Логирование: При отладке интеграций всегда сохраняйте текст отправляемого JSON и полученный ответ в текстовый файл или журнал регистрации. Это поможет быстро выяснить причину сбоя без повторных запросов к API.
  4. Использование потоков: Если вы передаете файлы большого объема (например, изображения или документы), вместо метода УстановитьТелоИзСтроки используйте УстановитьТелоИзПотока. Это позволит избежать переполнения оперативной памяти.

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

← На главную