Каталог решений - HTTP-клиент

Описание

Подсистема 1С для работы с HTTP

 

Представляет собой библиотеку методов и инструменты выполнения HTTP-запросов. Реализованы:

  • исполнение запросов по URI
  • исполнять запросы можно на клиенте и на сервере
  • текучий интерфейс методов настройки выполнения запроса
  • методы GET, POST, PUT, HEAD, DELETE
  • передача в теле запроса текста, данных файлов и двоичных данных
  • хранение данных результатов запросов в рамках сессии (Cookie, перенаправления)
  • получение сжатого контента в ответе
  • консоль интерактивного выполнения запросов
  • генерация кода 1С интерактивно настроенного в Консоли запроса
  • импорт файла Postman (формат файла v2.1)
  • настройка Консоли в соответствии с командой консольной утилиты curl
  • Клиент "понимает" IDN

Кредо системы: лаконичная результативность. К чему и стремимся.

Репозиторий на github

Является 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. Получается мощная связка:

  1. Импортируем (Postman или curl)
  2. Получаем код 1С
  3. PROFIT!

 

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

 

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

 

Окно сгенерированного Консолью кода

 

Установка

 

Требуемая минимальная версия платформы 8.3.10

 

HTTP-клиент встраивается в целевую конфигурацию сравнением / объединением. Объединять по подсистеме файла "КлиентHTTP".

Для обычных форм:

  • удостоверьтесь, что в свойствах конфигурации активна опция "Использовать управляемые формы в толстом клиенте и обычном режиме"
  • для общих модулей КлиентHTTPКлиентСервер, КлиентHTTPПовтИсп и КлиентHTTPСлужебный в свойствах установите опцию "Клиент (обычное приложение)"

 

PS

 

С интересом приму помощь в развитии Клиента. Клонируйте репозиторий, создавайте issue, пушьте пул-реквесты, пишите комментарии и главное – пользуйтесь.

Бесплатно Клиент скачать можно тут. А если хотите выразить благодарность в виде SM – с радостью буду за них приобретать на Инфостарте разработки коллег.

has been added to your cart:
Оформление заказа