1
0
mirror of https://github.com/vbondarevsky/Connector.git synced 2024-11-24 08:42:15 +02:00
Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
Go to file
Vladimir Bondarevskiy 5c7daedb13 Edit docs
2019-01-28 18:15:44 +03:00
src Разные правки 2019-01-28 03:44:38 +03:00
LICENSE Create LICENSE 2018-02-09 02:26:01 +03:00
README.md Edit docs 2019-01-28 18:15:44 +03:00

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8

В мире python очень популярна библиотека для работы с HTTP запросами - Requests (автор: Kenneth Reitz). Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п. В общем библиотека очень мощная и проста в использовании.

Коннектор - это "Requests" для мира 1С.

Требования

Платформа 8.3.10 и выше

Использование

Скопируйте модуль к себе в конфигурацию

Пример мощи библиотеки.

Чем же хороша библиотека? Давай уже покажи пример.

Получим данные JSON с помощью GET-запроса:

// 1С
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровОС);
Соединение = Новый HTTPСоединение("api.github.com", 443,,,, 30, ЗащищенноеСоединение);	
Запрос = Новый HTTPЗапрос("/events");
Ответ = Соединение.Получить(Запрос);
Поток = Ответ.ИсходныйОтвет.ПолучитьТелоКакПоток();
Кодировка = "utf-8"; // ну допустим мы знаем что там такая кодировка

Ридер = Новый ЧтениеJSON;
Ридер.ОткрытьПоток(Поток, Кодировка); // Кодировка в заголовке ответа
Объект = ПрочитатьJSON(Ридер);
Результат = Ридер.Закрыть();
// Коннектор
Результат = КоннекторHTTP.РезультатКакJson(КоннекторHTTP.Get("https://api.github.com/events"));

Все! В Результат будут данные в структуре. При этом библиотека сама разбила URL на составляющие, установила защищенное соединение, порт. Определила кодировку ответа из заголовков и десериализовала JSON. И это достаточно простой пример. Всю мощь библиотеки рассмотрим далее от простого к сложному.

Возможности

  • JSON TODO

Для GET, OPTIONS, HEAD, POST, PUT, PATCH, DELETE есть соответствующие методы. Или любой другой из HTTP-методов через вызов КоннекторHTTP.ВызватьМетод

Передача параметров в строку запроса (в URL)

Работать с параметрами запроса очень просто:

ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("name", СтрРазделить("Иванов,Петров", ","));
ПараметрыЗапроса.Вставить("salary", Формат(100000, "ЧГ="));

Ответ = КоннекторHTTP.GetJson("https://httpbin.org/anything/params", ПараметрыЗапроса);

Поддерживается передача нескольких значений для одного параметра, достаточно указать в качестве значения Массив (см. name).

Параметры можно задать:

  • Явно в URL
  • Передать в параметре ПараметрыЗапроса
  • Скомбинировать оба варианта

Результат будет один и тот же:

  • Коннектор подставит параметры в URL в виде пар ключ=значение
  • Закодирует строку URL, используя URLEncoding
  • Выполнит запрос

Итоговое значение URL можно получить из свойства ответа URL

Ответ = КоннекторHTTP.Get("https://httpbin.org/anything/params", ПараметрыЗапроса);

Ответ.URL - https://httpbin.org/anything/params?name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2&name=%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2&salary=100000

Содержимое ответа

Почти все методы возвращают ответ в виде Структура:

  • список TODO

Также имеются специальные методы, которые позволяют получить ответ в виде JSON, текста или двоичных данных.

JSON

Для GET предусмотрен метод GetJson, который сразу возвращает результат в виде Json.

Результат = КоннекторHTTP.GetJson("http://httpbin.org/get");

Результат вызова всех остальных методов можно легко преобразовать в Json в помощью метода КакJson.

Результат = КоннекторHTTP.КакJson(КоннекторHTTP.Post(("http://httpbin.org/get")));

Для обоих вариантов результат можно получить в Соответствие (по умолчанию) или в Структура с помощью параметра ПрочитатьВСоответствие.

Текст

Метод КакТекст преобразует ответ в текст.

Результат = КоннекторHTTP.КакТекст(КоннекторHTTP.Get("http://httpbin.org/encoding/utf8"));

При этом можно указать кодировку в соответствующем параметре. Если параметр не указан, то Коннектор возьмет значение кодировки из заголовков (если она там есть).

Двоичные данные

Метод КакДвоичныеДанные преобразует ответ в ДвоичныеДанные

Результат = КоннекторHTTP.КакДвоичныеДанные(КоннекторHTTP.Get("http://httpbin.org/image/png"));

Произвольные заголовки

TODO: в типовых сценариях заголовки подставляются автоматически Произвольные заголовки можно задать через параметр ДополнительныеПараметры

Заголовки = Новый Соответствие;
Заголовки.Вставить("X-My-Header", "Hello!!!");
Результат = КоннекторHTTP.GetJson("http://httpbin.org/headers",, Новый Структура("Заголовки", Заголовки));

Отправка данных формы

Отправить данные формы очень просто. Передаем наши данные (Структура или Соответствие) в метод POST и все.

Данные = Новый Структура;
Данные.Вставить("comments", "Постучать в дверь");
Данные.Вставить("custemail", "vasya@mail.ru");
Данные.Вставить("custname", "Вася");
Данные.Вставить("custtel", "112");
Данные.Вставить("delivery", "20:20");
Данные.Вставить("size", "medium");
Данные.Вставить("topping", СтрРазделить("bacon,mushroom", ","));

Ответ = КоннекторHTTP.Post("http://httpbin.org/post", Данные);

Данные будут закодированы, заголовок Content-Type автоматически будет установлено значение application/x-www-form-urlencoded.

Отправка JSON

Передаем данные Структура или Соответствие

Json = Новый Структура;
Json.Вставить("Сотрудник", "Иванов Иван Петрович");
Json.Вставить("Должность", "Разнорабочий");

в параметр Json метода POST

Ответ = КоннекторHTTP.Post("http://httpbin.org/post",, Json);

или в свойство Json параметра ДополнительныеПараметры для всех методов отправки данных

Ответ = КоннекторHTTP.Put("http://httpbin.org/put",, Новый Структура("Json", Json));

Данные будут сериализованы в JSON, установлен заголовок application/json.

Упрощенная работа с JSON

Для облегчения работы с JSON есть методы: GetJson, PostJson, PutJson, DeleteJson. Запросы отправляются в формате JSON, ответы - JSON прочитанный в Соответствие/Структура.

Результат = КоннекторHTTP.GetJson("http://httpbin.org/get");
Результат = КоннекторHTTP.PostJson("http://httpbin.org/post", Новый Структура("Название", "КоннекторHTTP"));
Результат = КоннекторHTTP.PutJson("http://httpbin.org/put", Новый Структура("Название", "КоннекторHTTP"));
Результат = КоннекторHTTP.DeleteJson("http://httpbin.org/delete", Новый Структура("Название", "КоннекторHTTP"));

Сериализация в JSON и десериализация из JSON настраиваются с помощью параметров в ДополнительныеПараметры.ПараметрыПреобразованияJSON.

POST a Multipart-Encoded File

https://wonderland.v8.1c.ru/blog/novye-instrumenty-dlya-raboty-s-dvoichnymi-dannymi-obespechivayut-kak-posledovatelnyy-dostup-k-danny/

POST Multiple Multipart-Encoded Files

Response Status Codes

Response Headers

Таймаут

Ответ = КоннекторHTTP.Get("https://httpbin.org/delay/10",, Новый Структура("Таймаут", 1));

Значение по умолчанию - 30 сек.

Basic-аутентификация

Параметры Basic-аутентификации можно передать через свойство ДополнительныеПараметры.Аутентификация

Аутентификация = Новый Структура("Пользователь, Пароль", "user", "pass");
Результат = КоннекторHTTP.GetJson(
    "https://httpbin.org/basic-auth/user/pass",,
    Новый Структура("Аутентификация", Аутентификация));

или в URL

Результат = КоннекторHTTP.GetJson("https://user:pass@httpbin.org/basic-auth/user/pass");

Digest-аутентификация

Параметры Digest-аутентификации можно передать через свойство ДополнительныеПараметры.Аутентификация. При этом Тип нужно установить в значение Digest.

Аутентификация = Новый Структура("Пользователь, Пароль, Тип", "user", "pass", "Digest");
Результат = КоннекторHTTP.GetJson(
    "https://httpbin.org/digest-auth/auth/user/pass",,
    Новый Структура("Аутентификация", Аутентификация));

GZip-кодирование

По умолчанию Коннектор просит сервер кодировать ответы в формате GZip. Декодирование выполняется прозрачным образом в методах GetJson, PostJson, PutJson, DeleteJson, КакJson, КакТекст, КакДвоичныеДанные.

Результат = КоннекторHTTP.GetJson("http://httpbin.org/gzip");

Доступ через прокси-сервер

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "192.168.1.51", 8192);
КоннекторHTTP.GetJson("http://httpbin.org/headers",,, Новый Структура("Прокси", Прокси));

Если в конфигурации используется БСП, то настройки прокси по умолчанию берутся из БСП.

Cookies

Редиректы (Перенапраления)

Коннектор по умолчанию автоматически разрешает редиректы. Например, попробуем получить результат поиска в Яндексе (http://ya.ru).

Результат = КоннекторHTTP.Get("http://ya.ru/", Новый Структура("q", "удаление кеша метаданных инфостарт"));

Что по факту произойдет при выполнении этого запроса:

  • сервер попросит выполнить запрос используя https, т.е. код статуса 302 и значение заголовка Location https://ya.ru/?q=...
  • Коннектор выполнит перезапрос, используя схему https
  • сервер попросит выполнить запрос, используя https://yandex.ru ....
  • Коннектор выполнит перезапрос, используя URL ...
  • сервер наконец-то вернет результат в виде html

Отключить автоматический редирект можно с помощью параметра ДополнительныеПараметры.РазрешитьПеренаправление.

Errors and Exceptions

Session Objects

TODO: можно пример получения списка обновлений с сайта 1С с авторизацией https://infostart.ru/public/255881/

Encodings

HTTP Verbs

Custom Verbs

SSL Cert Verification

Client Side Certificates