Как реализовать отправку HTTP-запросов (GET и POST) и обработку JSON в 1С 8.3?

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

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

Основы работы с HTTP в 1С

Для взаимодействия с внешними ресурсами платформа предоставляет три ключевых объекта. Разберем их назначение:

  1. HTTPСоединение — отвечает за установку канала связи с сервером (параметры сервера, порт, таймаут, прокси, SSL).
  2. HTTPЗапрос — формирует структуру конкретного сообщения (адрес ресурса, заголовки, тело запроса).
  3. HTTPОтвет — объект, который возвращает сервер (код состояния, заголовки ответа, тело данных).

Прежде чем приступать к кодингу, необходимо выяснить параметры целевого сервера: протокол (HTTP или HTTPS), адрес домена, необходимость авторизации и формат передаваемых данных.

Настройка защищенного соединения (SSL)

Большинство современных API работают через протокол HTTPS. Рассмотрим, как правильно инициализировать HTTPСоединение с использованием защищенного протокола. Проанализируем ситуацию, когда нам требуется игнорировать проверку сертификатов или использовать специфическую версию протокола TLS.


// Создание объекта защищенного соединения
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаWindows(), 
    Новый СертификатыУдостоверяющихЦентровWindows()
);

// Инициализация соединения
Сервер = "api.service.ru";
Порт = 443;
Таймаут = 30;

Соединение = Новый HTTPСоединение(
    Сервер, 
    Порт, 
    "Логин", 
    "Пароль", 
    , 
    Таймаут, 
    ЗащищенноеСоединение
);

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

Выполнение GET-запроса и получение данных

Метод GET обычно используется для получения информации. Рассмотрим подробнее, как сформировать запрос к ресурсу и получить ответ в виде строки. Допустим, нам нужно получить список товаров по API.


// Формируем адрес ресурса с параметрами
Ресурс = "/v1/products?category=electronics&limit=10";
Запрос = Новый HTTPЗапрос(Ресурс);

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

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

Обратите внимание на использование блока Попытка...Исключение. Это критически важно при сетевом взаимодействии, так как сервер может быть недоступен или возникнуть сетевой сбой.

Отправка POST-запроса с JSON-телом

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

Разберем по шагам процесс создания структуры данных, её упаковку в JSON и отправку на сервер:


// 1. Подготовка данных в 1С (Структура или Соответствие)
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("name", "Новый товар");
ДанныеДляОтправки.Вставить("price", 1500);
ДанныеДляОтправки.Вставить("article", "ABC-123");

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

// 3. Формирование запроса
ЗапросPOST = Новый HTTPЗапрос("/v1/products/create");
ЗапросPOST.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
ЗапросPOST.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

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

Если ОтветPOST.КодСостояния = 201 Тогда
    Сообщить("Объект успешно создан");
Иначе
    Сообщить("Код ошибки: " + ОтветPOST.КодСостояния);
    Сообщить("Ответ сервера: " + ОтветPOST.ПолучитьТелоКакСтроку());
КонецЕсли;

Использование ИспользованиеByteOrderMark.НеИспользовать часто является обязательным требованием для REST-сервисов, так как наличие BOM-символов в начале JSON-строки может привести к ошибке парсинга на стороне сервера.

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

После получения строки ответа от сервера, её необходимо преобразовать обратно в объекты 1С (Структуры, Массивы). Посмотрим на пример использования объекта ЧтениеJSON.


// Допустим, переменная ТекстОтвета содержит JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);

// Преобразование JSON в структуру/массив 1С
РезультатОбмена = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

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

Метод ПрочитатьJSON автоматически распознает типы данных: числа становятся Число, строки — Строка, булевы значения — Булево, а массивы и объекты преобразуются в Массив и Структура соответственно.

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

Проанализируем ситуацию, когда запрос не проходит. Выясним причины наиболее распространенных проблем:

  1. Ошибка 401 (Unauthorized): Проверьте правильность передачи токена или логина/пароля. Часто требуется заголовок Authorization: Bearer [токен].
  2. Ошибка 403 (Forbidden): У пользователя нет прав на ресурс или сервер блокирует запросы по IP (проверьте настройки прокси в 1С).
  3. Ошибка 400 (Bad Request): Неверный формат JSON. Используйте валидаторы, чтобы проверить строку, которую генерирует ЗаписьJSON.
  4. Таймаут (Timeout): Если сервер долго обрабатывает запрос, увеличьте параметр Таймаут в объекте HTTPСоединение (по умолчанию часто стоит 30 секунд).

Рекомендации по оптимизации

Для повышения стабильности работы системы рекомендуем выполнять тяжелые HTTP-запросы в фоновых заданиях. Это позволит избежать "зависания" интерфейса пользователя. Разберем по шагам, как это реализовать:

  1. Создайте общую процедуру в модуле с признаком "Сервер".
  2. Используйте ФоновыеЗадания.Выполнить() для запуска процесса.
  3. Для передачи результата обратно используйте временное хранилище или регистры сведений.

В завершение посмотрим на важность правильной кодировки. По умолчанию 1С использует UTF-8, что является стандартом для веба, но всегда проверяйте заголовки Content-Type, которые ожидает принимающая сторона.

Таким образом, мы рассмотрели полный цикл работы с HTTP-запросами в 1С. Понимание этих механизмов позволяет интегрировать систему 1С с любым современным веб-приложением, расширяя функциональность вашей конфигурации.

← На главную