Отправка HTTPS-запроса из 1С — важная задача для интеграции с различными веб-сервисами и API, которые требуют безопасного соединения. В 1С существует несколько способов отправки HTTP(S) запросов, но я опишу наиболее рекомендуемый и современный способ с использованием объекта HTTPСоединение.
Общие принципы:
Создание объекта HTTPСоединение. Формирование объекта HTTPЗапрос. Отправка запроса с помощью метода Получить(), ОтправитьДляОбработки() или ВызватьHTTPМетод(). Обработка ответа.
Пошаговая инструкция:
// 1. Создание объекта HTTPСоединение
АдресСервера = "api. example. com"; // Замените на адрес API
ПортСервера = 443; // HTTPS обычно использует порт 443
// Параметры безопасности (если требуются)
// Обычно используются для API с самоподписанными сертификатами или требующих аутентификацию
//Если нужно пропустить проверку сертификата
ПроверкаСертификата = Ложь;
//Если требуется аутентификация
ИмяПользователя = "";
ПарольПользователя = "";
//Создаем соединение
Попытка
HTTPСоединение = Новый HTTPСоединение(
АдресСервера,
ПортСервера,
,, //Имя пользователя для аутентификации
,, //Пароль пользователя для аутентификации
Новый ПараметрыHTTPСоединения(ПроверкаСертификата)
);
Исключение
Сообщить("Ошибка создания HTTP-соединения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 2. Формирование объекта HTTPЗапрос
URLЗапроса = "/resource"; // Замените на путь к ресурсу API
HTTPЗапрос = Новый HTTPЗапрос(URLЗапроса);
// Установка заголовков запроса (Content-Type, Authorization и т. д.)
HTTPЗапрос. Заголовки. Вставить("Content-Type", "application/json");
//Если требуется авторизация по Bearer token
Токен = "";
HTTPЗапрос. Заголовки. Вставить("Authorization", "Bearer " + Токен);
// Установка тела запроса (для POST, PUT, PATCH запросов)
ТелоЗапроса = Новый Строка(JSON. Stringify(ДанныеДляОтправки)); //ДанныеДляОтправки — структура или соответствие
HTTPЗапрос. УстановитьТелоИзСтроки(ТелоЗапроса, "UTF-8", "application/json");
// Установка метода запроса (GET, POST, PUT, DELETE и т. д.)
МетодЗапроса = "POST"; //или "GET", "PUT", "DELETE" и т. д.
// 3. Отправка запроса и получение ответа
Попытка
HTTPОтвет = HTTPСоединение. ВызватьHTTPМетод(HTTPЗапрос);
//4. Обработка ответа
КодСостояния = HTTPОтвет. КодСостояния;
ТекстОтвета = HTTPОтвет. ПолучитьТелоКакСтроку("UTF-8");
ЗаголовкиОтвета = HTTPОтвет. Заголовки;
Если КодСостояния >= 200 И КодСостояния <= 299 Тогда
// Запрос выполнен успешно
Сообщить("Запрос выполнен успешно. Код состояния: " + КодСостояния);
//Обработка ответа
Ответ = JSON. Parse(ТекстОтвета); //если в ответе JSON
Иначе
// Запрос выполнен с ошибкой
Сообщить("Ошибка при выполнении запроса. Код состояния: " + КодСостояния + ". Описание: " + ТекстОтвета);
КонецЕсли;
Исключение
Сообщить("Ошибка при отправке HTTP-запроса: " + ОписаниеОшибки());
КонецПопытки;
Разберем код подробнее:
- HTTPСоединение = Новый HTTPСоединение(…): Создает объект, представляющий соединение с сервером.
- АдресСервера: Доменное имя или IP-адрес сервера. ПортСервера: Порт, на котором работает веб-сервис (для HTTPS обычно 443). ПроверкаСертификата: Булево значение, указывающее, нужно ли проверять сертификат сервера. Ложь следует использовать только в тестовых средах или при работе с API, у которых самоподписанные сертификаты, и вы уверены в их надежности. В production-среде всегда следует устанавливать Истина. ИмяПользователя и ПарольПользователя: Используются, если сервер требует HTTP Basic Authentication.
HTTPЗапрос = Новый HTTPЗапрос(URLЗапроса): Создает объект, представляющий HTTP-запрос.
- URLЗапроса: Относительный путь к ресурсу на сервере (например, /api/users).
HTTPЗапрос. Заголовки. Вставить(…): Устанавливает заголовки HTTP-запроса.
- Content-Type: Указывает тип данных, передаваемых в теле запроса (например, application/json, application/xml). Authorization: Используется для передачи токена авторизации (например, Bearer <токен>).
HTTPЗапрос. УстановитьТелоИзСтроки(…): Устанавливает тело HTTP-запроса (для методов POST, PUT, PATCH).
- ТелоЗапроса: Строка, содержащая данные для отправки. Кодировка: Кодировка текста (обычно "UTF-8"). ТипТекста: Тип данных (должен совпадать с Content-Type).
Метод ВызватьHTTPМетод(): Отправляет запрос на сервер. Обработка ответа:
- HTTPОтвет. КодСостояния: Код состояния HTTP (например, 200 — OK, 400 — Bad Request, 404 — Not Found, 500 — Internal Server Error). HTTPОтвет. ПолучитьТелоКакСтроку("UTF-8"): Получает тело ответа в виде строки. HTTPОтвет. Заголовки: Получает заголовки ответа. Далее происходит обработка полученного ответа, в зависимости от формата (JSON, XML и т. д.)
Дополнительные моменты:
- Безопасность:
- Не храните секретные ключи и пароли непосредственно в коде 1С. Используйте защищенные хранилища или другие механизмы для хранения конфиденциальной информации. Внимательно проверяйте сертификаты серверов, с которыми устанавливаете соединение.
Обработка ошибок:
- Обязательно обрабатывайте ошибки, которые могут возникнуть при отправке HTTP-запросов. Используйте блоки Попытка…Исключение для перехвата исключений и записи информации об ошибках в журнал.
Таймауты:
- Устанавливайте таймауты для HTTP-соединений, чтобы избежать зависания системы при проблемах с сетью или сервером. Таймауты можно установить через параметры HTTPСоединения.
Рекомендации:
- Используйте объект HTTPСоединение для отправки HTTP(S) запросов. Внимательно заполняйте параметры соединения и запроса. Обрабатывайте ошибки и используйте таймауты. Для работы с JSON используйте объекты JSONЧтение и JSONЗапись. Для работы с XML используйте объекты XMLЧтение и XMLЗапись. Обратитесь к документации 1С для получения более подробной информации.