Коннектор HTTP
HTTP-клиент для 1С — аналог Python Requests. Реализован на базе библиотеки Connector версии 2.5.0.
- Модуль: УИ_КоннекторHTTP
- Репозиторий: github.com/vbondarevsky/Connector
- Лицензия: Apache 2.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.