Как программно отправить HTTP-запрос из 1С 8.3 и настроить защищенное соединение SSL?

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

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

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

Большинство современных API требуют работы через защищенный протокол HTTPS. Для этого в 1С необходимо использовать объект ЗащищенноеСоединениеOpenSSL. Если проигнорировать этот шаг, система выдаст ошибку при попытке установить связь с сервером по 443 порту.

Рассмотрим стандартный способ создания объекта защищенного соединения. Мы проанализируем ситуацию, когда сертификаты сервера проверяются автоматически средствами операционной системы, что является наиболее универсальным подходом.


// Создаем объект защищенного соединения
// Параметры позволяют указать конкретные сертификаты, но для большинства API достаточно дефолтных настроек
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

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

Шаг 2. Создание объекта HTTPСоединение

После подготовки параметров безопасности нам необходимо создать само соединение. Разберем по шагам параметры конструктора HTTPСоединение. Важно помнить, что в параметре "Сервер" указывается только доменное имя (например, api.telegram.org), без префиксов http:// или https://.


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

// Создаем соединение с сервером
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , Таймаут, ЗащищенноеСоединение);

Проанализируем возможные проблемы на этом этапе. Если ваша база 1С работает через прокси-сервер, параметры прокси необходимо передать четвертым аргументом конструктора, предварительно создав объект ИнтернетПрокси.

Шаг 3. Формирование HTTP-запроса (GET и POST)

Теперь рассмотрим, как подготовить сам запрос. Объект HTTPЗапрос содержит путь к конкретному методу API и заголовки. Выясним причину, почему важно правильно устанавливать заголовок Content-Type: без него сервер может не понять, в каком формате передаются данные (JSON, XML или обычный текст).

Пример формирования GET-запроса с параметрами в строке:


Ресурс = "/v1/methods/getData?user_id=123&token=abcde";
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Пример формирования POST-запроса с телом в формате JSON:

Для передачи данных в теле запроса мы сначала сформируем структуру, преобразуем её в строку JSON и установим в тело запроса.


ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("chat_id", "987654321");
ДанныеДляОтправки.Вставить("text", "Привет из 1С!");

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

Запрос = Новый HTTPЗапрос("/sendMessage");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

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

Выполним отправку запроса методом ВызватьHTTPМетод или специализированными методами ОтправитьДляОбъекта / Получить. После получения ответа (объект HTTPОтвет) необходимо проверить код состояния. Код 200 означает успех, коды 4xx и 5xx указывают на ошибки.


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

Практические советы по работе с HTTP в 1С

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

  1. Кодировка: Всегда явно указывайте КодировкаТекста.UTF8 при установке тела запроса и чтении ответа. Это исключит проблемы с кириллицей.
  2. Таймауты: При работе в регламентных заданиях не ставьте слишком большие таймауты, чтобы не блокировать сеансы. Оптимально — от 10 до 60 секунд.
  3. Логирование: При отладке полезно сохранять ТелоОтвета в текстовый файл или журнал регистрации, чтобы видеть сырые данные, которые прислал сервер в случае ошибки парсинга JSON.
  4. Повторные попытки: Сетевые соединения нестабильны. Рассмотрим возможность обернуть вызов в цикл с 3-5 попытками и паузой в 1-2 секунды между ними в случае сетевой ошибки.

Используя объекты HTTPСоединение, HTTPЗапрос и встроенные средства работы с JSON, вы сможете реализовать интеграцию любой сложности, от простых Telegram-ботов до обмена данными с государственными информационными системами. Помните о безопасности и всегда обрабатывайте исключительные ситуации в блоке Попытка...Исключение.

← На главную