HTTP-клиент
Подсистема 1С для работы с HTTP.
- Описание
- Подробнее
Описание
Подсистема 1С для работы с HTTP
Представляет собой библиотеку методов и инструменты выполнения HTTP-запросов. Реализованы:
- исполнение запросов по URI
- исполнять запросы можно на клиенте и на сервере
- текучий интерфейс методов настройки выполнения запроса
- методы GET, POST, PUT, HEAD, DELETE
- передача в теле запроса текста, данных файлов и двоичных данных
- хранение данных результатов запросов в рамках сессии (Cookie, перенаправления)
- получение сжатого контента в ответе
- консоль интерактивного выполнения запросов
- генерация кода 1С интерактивно настроенного в Консоли запроса
- импорт файла Postman (формат файла v2.1)
- настройка Консоли в соответствии с командой консольной утилиты curl
- Клиент "понимает" IDN
Кредо системы: лаконичная результативность. К чему и стремимся.
Является open source с лицензией Apache 2.0
Пример кода
В первую очередь Клиент – это библиотека методов выполнения HTTP-запросов.
Оформлял экспортные методы модулей с комментариями. Все методы выполнения представлены в модуле КлиентHTTPКлиентСервер. Константные значения – в КлиентHTTPПовтИсп. Пара примеров:
Голый GET
Ответ = КлиентHTTPКлиентСервер.Получить("https://ya.ru");
Установка параметров запроса
Адрес = "https://evilinsult.com/generate_insult.php";
// Добавим параметры URL: ?lang=ru&type=json
ПЗ = КлиентHTTPКлиентСервер.НовыеПараметрыЗапроса();
КлиентHTTPКлиентСервер
.ДобавитьПараметр(ПЗ, "lang", "ru")
.ДобавитьПараметр(ПЗ, "type", "json");
Ответ = КлиентHTTPКлиентСервер.Получить(Адрес, ПЗ);
Текст = ПолучитьСтрокуИзДвоичныхДанных(Ответ.Тело);или же
Ответ = КлиентHTTPКлиентСервер.Получить(
"https://evilinsult.com/generate_insult.php?lang=ru&type=json"
);
Сохранение тела ответа в файл
Адрес = "https://epic.gsfc.nasa.gov/archive/natural/2015/10/31/png/epic_1b_20151031074844.png";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
.УстановитьИмяВыходногоФайла(ДП, "С:\tmp\pic.png")
.Получить(Адрес, , ДП);
POST текста
Адрес = "https://jsonplaceholder.typicode.com/posts";
Данные = "{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
.УстановитьТипMIME(ДП, КлиентHTTPПовтИсп.ТипMIMEJSON())
.УстановитьКодировку(ДП, КлиентHTTPПовтИсп.КодировкаUTF16())
.ОтправитьТекст(Адрес, Данные, ДП);
Текст = ПолучитьСтрокуИзДвоичныхДанных(Ответ.Тело);
POST multipart/form-data
Адрес = "https://httpbin.org/post";
ПФ = КлиентHTTPКлиентСервер.НовыеПоляФормы();
ФайлПоля = Новый Файл("C:\temp\1.png");
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
.ДобавитьПолеФормыФайл(ПФ, "my_file", ФайлПоля, ФайлПоля.Имя, КлиентHTTPСлужебный.ТипMIMEРасширенияФайла(ФайлПоля.Расширение))
.ДобавитьПолеФормыТекст(ПФ, "user_name", "Имярек")
.ОтправитьДанныеФормы(Адрес, ПФ);
Текст = ПолучитьСтрокуИзДвоичныхДанных(Ответ.Тело);
POST application/x-www-form-urlencoded
Адрес = "https://httpbin.org/post";
ПФ = КлиентHTTPКлиентСервер.НовыеПоляФормы();
Ответ = КлиентHTTPКлиентСервер
.ДобавитьПолеHTMLФормы(ПФ, "user_name", "Имярек")
.ДобавитьПолеHTMLФормы(ПФ, "role", "Сотрудник")
.ОтправитьДанныеHTMLФормы(Адрес, ПФ);
Использование сессии (включение Cookie и перенаправлений)
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
КлиентHTTPКлиентСервер.ИспользоватьСессию(ДП);
Ответ1 = КлиентHTTPКлиентСервер.Получить("https://www.google.com/search?q=infostart", , ДП);
Ответ2 = КлиентHTTPКлиентСервер.Получить("https://play.google.com/store/search?q=infostart", , ДП);
// КукиЗдесь = ДП.Сессия.Печенье;
// Перенаправления сработают автоматически
Авторизация
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
.УстановитьDigestАвторизацию(ДП, "login", "password")
.Получить("http://192.168.1.1", , ДП);
Консоль
Неосновная, но приятная фича Клиента – Консоль. Инструмент интерактивного выполнения запросов с кодогенерацией.
Обработка КлиентHTTP. Интерфейсом ориентировался на Postman. Сложностей по части UX (кроме багов) возникнуть не должно. В Консоли можно импортировать файл Postman или распарсить команду curl. Получается мощная связка:
- Импортируем (Postman или curl)
- Получаем код 1С
- PROFIT!

Результат выполнения запроса со статистикой выполнения

Окно редактирования Cookie с примером редактирования текста поля

Окно сгенерированного Консолью кода
Установка
Требуемая минимальная версия платформы 8.3.10
HTTP-клиент встраивается в целевую конфигурацию сравнением / объединением. Объединять по подсистеме файла "КлиентHTTP".
Для обычных форм:
- удостоверьтесь, что в свойствах конфигурации активна опция "Использовать управляемые формы в толстом клиенте и обычном режиме"
- для общих модулей КлиентHTTPКлиентСервер, КлиентHTTPПовтИсп и КлиентHTTPСлужебный в свойствах установите опцию "Клиент (обычное приложение)"
PS
С интересом приму помощь в развитии Клиента. Клонируйте репозиторий, создавайте issue, пушьте пул-реквесты, пишите комментарии и главное – пользуйтесь.
Бесплатно Клиент скачать можно тут. А если хотите выразить благодарность в виде SM – с радостью буду за них приобретать на Инфостарте разработки коллег.
