Как программно настроить и выполнить HTTP-запросы в 1С:Предприятие 8.3?

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

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

Основы архитектуры HTTP-взаимодействия в 1С

Проанализируем основные объекты, которые платформа 1С предоставляет для работы с веб-сервисами. Основным инструментом является объект HTTPСоединение, который отвечает за установку канала связи с сервером. Однако для формирования самого сообщения нам потребуются дополнительные объекты: HTTPЗапрос для описания параметров запроса и HTTPОтвет для получения результата от сервера.

Рассмотрим пошагово процесс подготовки соединения. Перед тем как отправить первый байт данных, мы должны определить адрес ресурса, порт и параметры безопасности. Если сервер требует защищенного соединения, нам понадобится объект ЗащищенноеСоединениеOpenSSL. Давайте посмотрим на пример инициализации базового соединения:


ИмяСервера = "api.service.com";
Порт = 443; // Стандартный порт для HTTPS
Сертификат = Новый ЗащищенноеСоединениеOpenSSL();

Соединение = Новый HTTPСоединение(ИмяСервера, Порт, , , , 30, Сертификат);

В данном примере мы установили таймаут 30 секунд. Это критически важный параметр: если внешний сервис работает медленно, программа не должна "зависать" бесконечно. Мы также указали использование OpenSSL для работы через HTTPS.

Формирование и отправка GET-запроса

Разберем ситуацию, когда нам нужно получить данные от сервера, например, актуальный курс валют или список заказов из интернет-магазина. Для этого используется метод GET. Особенность этого метода в том, что все параметры передаются непосредственно в строке адреса (URL-параметры).

Проанализируем, как правильно сформировать строку запроса, чтобы сервер корректно её распознал. Для этого в 1С используется объект HTTPЗапрос. Посмотрим на пример кода:


АдресРесурса = "/v1/orders?status=new&date=2023-10-27";
Запрос = Новый HTTPЗапрос(АдресРесурса);

// Добавим заголовки, если API требует авторизацию по токену
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Запрос.Заголовки.Вставить("Accept", "application/json");

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

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

Работа с методом POST и передача данных в формате JSON

Теперь рассмотрим более сложный сценарий: нам необходимо отправить данные в стороннюю систему, например, создать новую карточку контрагента или отправить уведомление. Для этого чаще всего используется метод POST, где данные передаются в теле запроса.

Современные API в 90% случаев используют формат JSON. Разберем, как подготовить данные. Сначала мы создаем структуру в 1С, затем преобразуем её в строку JSON и помещаем в тело запроса. Посмотрим на практический пример:


// Подготовка данных
ДанныеДляОтправки = Новый Структура;
ДанныеДляОтправки.Вставить("id", "123");
ДанныеДляОтправки.Вставить("name", "ООО Ромашка");
ДанныеДляОтправки.Вставить("amount", 1500.50);

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

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

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

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

Важный момент: при использовании УстановитьТелоИзСтроки мы указали ИспользованиеByteOrderMark.НеИспользовать. Это критично для многих веб-серверов, так как лишние символы в начале строки (BOM) могут привести к ошибке парсинга на стороне сервера.

Обработка полученных ответов и парсинг JSON

Выясним, как эффективно обрабатывать данные, которые вернул сервер. После выполнения запроса мы получаем объект HTTPОтвет. Проанализируем его содержимое. Основными свойствами являются КодСостояния и само "тело" ответа.

Для разбора JSON в 1С используется объект ЧтениеJSON. Давайте разберем алгоритм превращения текстового ответа обратно в коллекцию значений 1С (Структуру или Массив):


ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

РезультатМассив = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Для Каждого Элемент Из РезультатМассив Цикл
    Сообщить("Получен объект с ID: " + Элемент.id);
КонецЦикла;

Использование ПрочитатьJSON позволяет автоматически преобразовать типы данных: числа станут числами, булево — булево, а вложенные объекты — структурами 1С. Это значительно упрощает дальнейшую работу с кодом.

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

Проанализируем наиболее частые проблемы, с которыми сталкиваются программисты при работе с HTTP в 1С. Одной из самых коварных является ошибка "Удаленный хост принудительно разорвал существующее подключение". Чаще всего это связано с несоответствием версий протокола TLS. В таких случаях необходимо явно настроить параметры ЗащищенноеСоединениеOpenSSL, указав разрешенные протоколы.

Еще одна проблема — кодировки. Несмотря на то что стандартом де-факто является UTF-8, старые системы могут ожидать Windows-1251. Всегда проверяйте документацию к API. Для смены кодировки используйте соответствующие параметры в методе УстановитьТелоИзСтроки.

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


Прокси = Новый ИнтернетПрокси(Ложь); // Использовать системные настройки или задать вручную
Прокси.Установить("https", "192.168.1.1", 8080, "user", "password");

Соединение = Новый HTTPСоединение(ИмяСервера, , , , Прокси, 30, Сертификат);

Заключение и лучшие практики

Подводя итоги, сформулируем несколько важных правил. Во-первых, всегда выносите настройки интеграции (адреса, токены, таймауты) в константы или справочники, чтобы их можно было изменить без правки кода. Во-вторых, логируйте все запросы и ответы, по крайней мере, на этапе отладки. Это сэкономит часы при поиске причин, почему "что-то перестало работать".

Мы рассмотрели базовые и продвинутые техники работы с HTTP в 1С. Эти знания позволят вам строить надежные и производительные системы интеграции, способные обмениваться данными с любыми современными сервисами.

← На главную