Перейти к основному содержимому

Коннектор HTTP

HTTP-клиент для 1С — аналог Python Requests. Реализован на базе библиотеки Connector версии 2.5.0.

к сведению

Модуль поддерживает пул соединений, автоматические повторы запросов (retry) с экспоненциальной задержкой, GZip-сжатие, Digest-аутентификацию и AWS4-HMAC-SHA256.

Основные HTTP-методы

МетодОписаниеВозврат
Get(URL, ПараметрыЗапроса, ДопПараметры, Сессия)GET-запросСтруктура (ответ)
Post(URL, Данные, ДопПараметры, Сессия)POST-запросСтруктура (ответ)
Put(URL, Данные, ДопПараметры, Сессия)PUT-запросСтруктура (ответ)
Patch(URL, Данные, ДопПараметры, Сессия)PATCH-запросСтруктура (ответ)
Delete(URL, Данные, ДопПараметры, Сессия)DELETE-запросСтруктура (ответ)
Options(URL, ДопПараметры, Сессия)OPTIONS-запросСтруктура (ответ)
Head(URL, ДопПараметры, Сессия)HEAD-запросСтруктура (ответ)
ВызватьМетод(Метод, URL, ДопПараметры, Сессия)Произвольный HTTP-методСтруктура (ответ)

Методы для работы с JSON

МетодОписаниеВозврат
GetJson(URL, ПараметрыЗапроса, ДопПараметры, Сессия)GET + десериализация JSONСоответствие / Структура
PostJson(URL, Данные, ДопПараметры, Сессия)POST + сериализация тела в JSON + десериализация ответаСоответствие / Структура
PutJson(URL, Данные, ДопПараметры, Сессия)PUT + JSONСоответствие / Структура
DeleteJson(URL, Данные, ДопПараметры, Сессия)DELETE + JSONСоответствие / Структура

Конструкторы

МетодОписаниеВозврат
НовыеПараметры()Дополнительные параметры запроса (таймаут, заголовки, повторы, прокси, SSL и др.)Структура
СоздатьСессию()Сессия для общих параметров между запросами (cookies, заголовки, аутентификация)Структура
НовыйОтвет()Структура ответа HTTP-запросаСтруктура
НовыйОтправляемыйФайл(Имя, ИмяФайла, Данные, Тип)Описание файла для multipart/form-dataСтруктура
НоваяАутентификацияОС()Аутентификация ОС (NTLM/Negotiate)Структура
НоваяАутентификацияBasic(Пользователь, Пароль)Basic-аутентификацияСтруктура
НоваяАутентификацияDigest(Пользователь, Пароль)Digest-аутентификацияСтруктура
НоваяАутентификацияAWS4(КлючДоступа, СекретныйКлюч, Сервис, Регион)AWS4-HMAC-SHA256 аутентификацияСтруктура

Форматы ответов

МетодОписаниеВозврат
КакJson(Ответ, ПараметрыПреобразованияJSON)Десериализация ответа в JSONСоответствие / Структура
КакТекст(Ответ, Кодировка)Ответ в виде текстаСтрока
КакДвоичныеДанные(Ответ)Ответ в виде двоичных данныхДвоичныеДанные
КакXDTO(Ответ, ПараметрыЧтенияXML, НаборСхемXML, Кодировка)Десериализация ответа в XDTOОбъектXDTO / СписокXDTO
КакИсключение(Ответ, ТекстДляПользователя)Формирование текста исключения из ответаСтрока

Вспомогательные функции

МетодОписаниеВозврат
РазобратьURL(URL)Структурированное представление URLСтруктура
ОбъектВJson(Объект, ПараметрыПреобраз, ПараметрыЗаписи)Преобразование объекта 1С в JSONСтрока
JsonВОбъект(Json, Кодировка, ПараметрыПреобраз)Преобразование JSON в объект 1СПроизвольный
HMAC(Ключ, Данные, Алгоритм)Вычисление HMACДвоичныеДанные
КодыСостоянияHTTP()Именованные коды состояний HTTPСтруктура
ПредставлениеКодаСостоянияHTTP(КодСостояния)Текстовое представление кода состоянияСтрока
ПрочитатьGZip(СжатыеДанные)Распаковка GZipДвоичныеДанные
ЗаписатьGZip(Данные)Упаковка в GZipДвоичныеДанные

Полное описание параметров и возвращаемых значений см. в README репозитория.

Примеры

GET-запрос к API GitHub

Результат = УИ_КоннекторHTTP.Get("https://api.github.com/repos/cpr1c/tools_ui_1c");
Если Результат.КодСостояния = 200 Тогда
Сообщить(УИ_КоннекторHTTP.КакТекст(Результат));
КонецЕсли;

POST с JSON и обработка ответа

Данные = Новый Структура;
Данные.Вставить("title", "Новая задача");
Данные.Вставить("completed", Ложь);

Параметры = УИ_КоннекторHTTP.НовыеПараметры();
Параметры.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Параметры.Таймаут = 15;

Результат = УИ_КоннекторHTTP.PostJson(
"https://jsonplaceholder.typicode.com/todos",
Данные,
Параметры
);

Если Результат.КодСостояния = 201 Тогда
Ответ = УИ_КоннекторHTTP.КакJson(Результат);
Сообщить("Создана задача: " + Ответ.Получить("id"));
КонецЕсли;

Использование сессии с cookies и повторными попытками

Сессия = УИ_КоннекторHTTP.СоздатьСессию();
Сессия.Заголовки.Вставить("User-Agent", "Mozilla/5.0");

Параметры = УИ_КоннекторHTTP.НовыеПараметры();
Параметры.МаксимальноеКоличествоПовторов = 3;
Параметры.ПараметрыЗапроса = Новый Структура("q,per_page", "1С", 10);

Результат = УИ_КоннекторHTTP.Get(
"https://api.github.com/search/issues",
,
Параметры,
Сессия
);
Сообщить("Статус: " + Результат.КодСостояния);

Отправка файла (multipart/form-data)

Файл = УИ_КоннекторHTTP.НовыйОтправляемыйФайл(
"file",
"report.xlsx",
ДвоичныеДанные,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);

Параметры = УИ_КоннекторHTTP.НовыеПараметры();
Параметры.Файлы.Добавить(Файл);
Параметры.Заголовки.Вставить("Authorization", "Bearer " + Токен);

Результат = УИ_КоннекторHTTP.Post("https://example.com/api/upload", , Параметры);
Если Результат.КодСостояния = 200 Тогда
Сообщить("Файл отправлен");
КонецЕсли;

Вызов с Digest-аутентификацией и прокси

Параметры = УИ_КоннекторHTTP.НовыеПараметры();
Параметры.Аутентификация = УИ_КоннекторHTTP.НоваяАутентификацияDigest("user", "pass");

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "proxy.local", 8080);
Параметры.Прокси = Прокси;

Результат = УИ_КоннекторHTTP.Get(
"https://httpbin.org/digest-auth/auth/user/pass",
,
Параметры
);
Сообщить(УИ_КоннекторHTTP.КакТекст(Результат));
подсказка

Для интерактивной работы с HTTP-запросами используйте Консоль HTTP.