Как программно реализовать HTTP-запросы (GET и POST) в 1С 8.3: подробное руководство

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

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

Основы работы с HTTP-соединением

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

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

Разберем пример создания базового соединения по шагам:


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

// Настраиваем защищенное соединение
Защита = Новый ЗащищенноеСоединениеOpenSSL();

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

В данном фрагменте кода мы инициализируем объект HTTPСоединение. Обратите внимание, что параметры логина и пароля оставлены пустыми, если сервер использует API-ключи в заголовках, а не базовую аутентификацию (Basic Auth).

Формирование и выполнение GET-запроса

Проанализируем ситуацию, когда нам необходимо получить данные с сервера. Метод GET подразумевает, что параметры передаются прямо в строке адреса (URL). Выясним, как правильно составить адрес ресурса и выполнить запрос.

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


// Указываем путь к ресурсу с параметрами
АдресРесурса = "/v1/data?type=status&id=123";

// Создаем объект запроса
Запрос = Новый HTTPЗапрос(АдресРесурса);

// Добавляем необходимые заголовки
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);

// Выполняем запрос
Попытка
    Ответ = Соединение.Получить(Запрос);
    // Проверяем код состояния
    Если Ответ.КодСостояния = 200 Тогда
        Сообщить("Данные успешно получены!");
    Иначе
        Сообщить("Ошибка сервера. Код: " + Ответ.КодСостояния);
    КонецЕсли;
Исключение
    Сообщить("Не удалось установить соединение с сервером: " + ОписаниеОшибки());
КонецПопытки;

Рассмотрим подробнее работу с кодами состояния. Код 200 (OK) означает успех, однако внешние системы могут возвращать 201 (Created) или 204 (No Content). Программисту 1С важно предусмотреть обработку различных сценариев, включая ошибки клиента (4xx) и ошибки сервера (5xx).

Реализация POST-запроса с передачей JSON

Теперь разберем более сложную задачу — отправку данных на сервер. Метод POST требует наличия тела запроса (Body). Чаще всего данные передаются в формате JSON. Посмотрим на пример, где мы упаковываем структуру 1С в JSON-строку и отправляем ее внешнему сервису.

Для корректной работы с данными используются объекты ЗаписьJSON и ПрочитатьJSON. Это позволяет избежать ручного формирования строк, что минимизирует риск возникновения ошибок в синтаксисе.


// Подготавливаем данные для отправки (структура 1С)
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("Action", "UpdateStock");
ДанныеДляОтправки.Вставить("SKU", "100500");
ДанныеДляОтправки.Вставить("Quantity", 42);

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

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

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

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

Важный момент: при использовании метода УстановитьТелоИзСтроки крайне рекомендуется явно указывать кодировку UTF8 и отключать ByteOrderMark, так как многие веб-серверы некорректно воспринимают BOM-символы в начале JSON-пакета.

Обработка полученного ответа

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

Проанализируем алгоритм десериализации JSON-ответа обратно в объекты 1С (Структуры и Массивы):


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

Типичные ошибки и способы их решения

Рассмотрим основные трудности, с которыми сталкиваются разработчики при настройке HTTP-интеграций (для отладки пригодится инструмент логирования и анализа HTTP-запросов):

  1. Ошибка SSL (Peer certificate cannot be authenticated): Возникает, если на сервере установлен сертификат от недоверенного центра сертификации. В некоторых случаях помогает импорт сертификата в хранилище сертификатов ОС или платформы, либо настройка параметров ЗащищенноеСоединениеOpenSSL с игнорированием проверки цепочки (хотя это небезопасно).
  2. Таймаут соединения: Если сервер отвечает долго, 1С может разорвать соединение по умолчанию через 20-30 секунд. Увеличьте параметр Таймаут в объекте HTTPСоединение до 60 или даже 120 секунд для тяжелых отчетов.
  3. Кодировка: Всегда проверяйте заголовки Content-Type. Если сервер ожидает windows-1251, а вы отправляете UTF-8, данные будут искажены.
  4. Прокси-сервер: Если сервер 1С находится за прокси, параметры прокси-сервера (адрес, порт, логин, пароль) необходимо передавать в конструктор HTTPСоединение отдельными параметрами.

Подводя итог, можно сказать, что работа с HTTP в 1С 8.3 — это гибкий и мощный инструмент. Главное — четко следовать спецификации API стороннего сервиса, внимательно относиться к заголовкам и всегда использовать блоки Попытка...Исключение для обработки сетевых сбоев. Мы проанализировали основные методы и подходы, которые позволят вам создать надежный механизм обмена данными — для решения этой задачи подойдёт готовый конструктор REST API для 1С.

← На главную