Работать с параметрами запроса очень просто:
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("name", СтрРазделить("Иванов,Петров", ","));
ПараметрыЗапроса.Вставить("salary", Формат(100000, "ЧГ="));
Ответ = КоннекторHTTP.Get("https://connectorhttp.ru/anything/params", ПараметрыЗапроса).Json();
Поддерживается передача нескольких значений для одного параметра, достаточно указать в качестве значения Массив
(см. name
).
Параметры можно задать:
- Явно в URL
- Передать в параметре
ПараметрыЗапроса
- Скомбинировать оба варианта
Результат будет один и тот же:
- Коннектор подставит параметры в URL в виде пар ключ=значение
- Закодирует строку URL, используя
URLEncoding
- Выполнит запрос
Итоговое значение URL можно получить из свойства ответа URL
Ответ = КоннекторHTTP.Get("https://connectorhttp.ru/anything/params", ПараметрыЗапроса);
В основных сценариях использования библиотеки заголовки формируются автоматически.
При необходимости произвольные заголовки можно задать через параметр ДополнительныеПараметры
, свойство Заголовки
.
Заголовки = Новый Соответствие;
Заголовки.Вставить("X-My-Header", "Hello!!!");
Результат = КоннекторHTTP.Get("http://connectorhttp.ru/headers",, Новый Структура("Заголовки", Заголовки)).Json();
Отправить данные формы очень просто.
Передаем данные (Структура
или Соответствие
) в метод POST
и все.
Данные = Новый Структура;
Данные.Вставить("comments", "Постучать в дверь");
Данные.Вставить("custemail", "vasya@mail.ru");
Данные.Вставить("custname", "Вася");
Данные.Вставить("custtel", "112");
Данные.Вставить("delivery", "20:20");
Данные.Вставить("size", "medium");
Данные.Вставить("topping", СтрРазделить("bacon,mushroom", ","));
Ответ = КоннекторHTTP.Post("http://connectorhttp.ru/post", Данные);
Данные будут закодированы, заголовку Content-Type
автоматически будет установлено значение application/x-www-form-urlencoded
.
Для отправки файла нужно сформировать описание файла и передать его в параметр ДополнительныеПараметры.Файлы
.
Файлы = Новый Структура;
Файлы.Вставить("Имя", "f1");
Файлы.Вставить("ИмяФайла", "file1.txt");
Файлы.Вставить("Данные", Base64Значение("0J/RgNC40LLQtdGCINCc0LjRgCE="));
Файлы.Вставить("Тип", "text/plain");
Ответ = КоннекторHTTP.Post("https://connectorhttp.ru/post", Неопределено, Неопределено, Новый Структура("Файлы", Файлы));
Файл будет закодирован в теле запроса, заголовку Content-Type
автоматически установлено значение multipart/form-data
.
Для отправки данных формы и файлов в одном запросе нужно сформировать описание файлов и данных формы и передать их в параметрах ДополнительныеПараметры.Файлы
, ДополнительныеПараметры.Данные
.
Файлы = Новый Массив;
Файлы.Добавить(Новый Структура("Имя,Данные,ИмяФайла", "f1", Base64Значение("ZmlsZTE="), "file1.txt"));
Файлы.Добавить(Новый Структура("Имя,Данные,ИмяФайла", "f2", Base64Значение("ZmlsZTI="), "file2.txt"));
Данные = Новый Структура("field1,field2", "value1", "Значение2");
Ответ = КоннекторHTTP.Post("https://connectorhttp.ru/post", Неопределено, Неопределено, Новый Структура("Файлы,Данные", Файлы, Данные));
Файлы и данные формы будут закодированы в теле запроса, заголовку Content-Type
автоматически установлено значение multipart/form-data
.
Чтобы отправить произвольные данные (Строка
, ДвоичныеДанные
) их нужно передать в параметре Данные
.
XML =
"<?xml version=""1.0"" encoding=""utf-8""?>
|<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
| <soap:Body>
| <GetCursOnDate xmlns=""http://web.cbr.ru/"">
| <On_date>2019-07-05</On_date>
| </GetCursOnDate>
| </soap:Body>
|</soap:Envelope>";
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
Заголовки.Вставить("SOAPAction", "http://web.cbr.ru/GetCursOnDate");
Ответ = КоннекторHTTP.Post(
"https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx",
XML,
Неопределено,
Новый Структура("Заголовки", Заголовки));
Методы возвращают ответ в виде Структура
:
ВремяВыполнения
- Число - время выполнения запроса в миллисекундахCookies
- cookies полученные с сервераЗаголовки
- HTTP заголовки ответаЭтоПостоянныйРедирект
- признак постоянного редиректаЭтоРедирект
- признак редиректаКодировка
- кодировка текста ответаКодСостояния
- код состояния ответаURL
- итоговый URL, по которому был выполнен запрос
Получить данные из ответа в виде JSON, теста или двоичных данных можно с помощью соответствующих методов, описанных ниже.
Получить данные из ответа в виде десериализованного JSON можно с помощью метода Json
.
Результат = КоннекторHTTP.Post("http://connectorhttp.ru/get").Json();
Получить данные из ответа в виде текста можно с помощью метода Текст
.
Результат = КоннекторHTTP.Get("http://connectorhttp.ru/encoding/utf8").Текст();
При этом можно указать кодировку в соответствующем параметре. Если параметр не указан, то библиотека возьмет значение кодировки из заголовков (если она там есть).
Метод ДвоичныеДанные
преобразует ответ в ДвоичныеДанные
.
Результат = КоннекторHTTP.Get("http://connectorhttp.ru/image/png").ДвоичныеДанные();
По умолчанию Коннектор просит сервер кодировать ответы в формате GZip
.
Декодирование выполняется прозрачным образом.
Результат = КоннекторHTTP.Get("http://connectorhttp.ru/gzip").Json();
Таймаут можно задать в параметре ДополнительныеПараметры.Таймаут
.
Ответ = КоннекторHTTP.Get("https://connectorhttp.ru/delay/10", Неопределено, Новый Структура("Таймаут", 1));
Значение по умолчанию - 30 сек.
Параметры Basic-аутентификации можно передать в параметре ДополнительныеПараметры.Аутентификация
Аутентификация = Новый Структура("Пользователь, Пароль", "user", "pass");
Результат = КоннекторHTTP.Get(
"https://connectorhttp.ru/basic-auth/user/pass",
Неопределено,
Новый Структура("Аутентификация", Аутентификация)).Json();
или в URL
Результат = КоннекторHTTP.Get("https://user:pass@connectorhttp.ru/basic-auth/user/pass").Json();
Параметры Digest-аутентификации можно передать в параметре ДополнительныеПараметры.Аутентификация
.
При этом Тип
нужно установить в значение Digest
.
Аутентификация = Новый Структура("Пользователь, Пароль, Тип", "user", "pass", "Digest");
Результат = КоннекторHTTP.Get(
"https://connectorhttp.ru/digest-auth/auth/user/pass",
Неопределено,
Новый Структура("Аутентификация", Аутентификация)).Json();
Параметры AWS4-HMAC-SHA256-аутентификации можно передать в параметре ДополнительныеПараметры.Аутентификация
.
При этом Тип
нужно установить в значение AWS4-HMAC-SHA256
и задать свойства: ИдентификаторКлючаДоступа
, СекретныйКлюч
, Сервис
, Регион
.
Аутентификация = Новый Структура;
Аутентификация.Вставить("Тип", "AWS4-HMAC-SHA256");
Аутентификация.Вставить("ИдентификаторКлючаДоступа", "AKIAU00002SQ4MT");
Аутентификация.Вставить("СекретныйКлюч", "МойСекретныйКлюч");
Аутентификация.Вставить("Регион", "ru-central1");
Аутентификация.Вставить("Сервис", "s3");
Файл = Новый ДвоичныеДанные("my_file.txt");
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "text/plain");
Заголовки.Вставить("x-amz-meta-author", "Vladimir Bondarevskiy");
Заголовки.Вставить("Expect", "100-continue");
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация);
ДополнительныеПараметры.Вставить("Таймаут", 300);
Ответ = КоннекторHTTP.Put("https://test.storage.yandexcloud.net/my_file.txt", Файл, ДополнительныеПараметры);
Настройки прокси можно передать в параметре ДополнительныеПараметры.Прокси
.
Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "192.168.1.51", 8192);
Результат = КоннекторHTTP.Get("http://connectorhttp.ru/headers", Неопределено, Новый Структура("Прокси", Прокси)).Json();
Для GET
, OPTIONS
, HEAD
, POST
, PUT
, PATCH
, DELETE
есть соответствующие методы.
Для любого из HTTP-методов можно отправить запрос через вызов метода ВызватьМетод
.
Коннектор по умолчанию автоматически разрешает редиректы. Например, попробуем получить результат поиска в Яндексе (http://ya.ru).
Результат = КоннекторHTTP.Get("http://ya.ru/", Новый Структура("q", "удаление кеша метаданных инфостарт"));
Что по факту произойдет при выполнении этого запроса:
- Коннектор выполнит запрос к URL http://ya.ru/
- Сервер попросит выполнить запрос используя
https
, т.е. вернет код статуса302
и значение заголовкаLocation
=https://ya.ru/?q=...
- Коннектор выполнит перезапрос, используя схему
https
- Cервер попросит выполнить запрос, используя другой URL, т.е. вернет код статуса
302
и значение заголовкаLocation
=https://yandex.ru/search/?text=...
- Коннектор выполнит перезапрос, используя URL
https://yandex.ru/search/?text=...
- Cервер наконец-то вернет результат в виде
html
Отключить автоматический редирект можно с помощью параметра ДополнительныеПараметры.РазрешитьПеренаправление
.
Коннектор извлекает cookies из заголовков Set-Cookie
ответа сервера для дальнейшего использования.
Полученные cookies можно посмотреть в свойстве ответа Cookies
.
Передать произвольные cookies на сервер можно с помощью параметра ДополнительныеПараметры.Cookies
.
Cookies = Новый Массив;
Cookies.Добавить(Новый Структура("Наименование,Значение", "k1", Строка(Новый УникальныйИдентификатор)));
Cookies.Добавить(Новый Структура("Наименование,Значение", "k2", Строка(Новый УникальныйИдентификатор)));
Ответ = КоннекторHTTP.Get("http://connectorhttp.ru/cookies", Неопределено, Новый Структура("Cookies", Cookies));
Коннектор позволяет работать с сервером в рамках сессии, т.е. сохраняет состояние на клиенте между вызовами.
Например, попробуем получить с сайта releases.1c.ru список обновлений.
Сессия = Новый Сессия();
Ответ = Сессия.ВызватьМетод("GET", "https://releases.1c.ru/total");
Данные = Новый Структура;
Данные.Вставить("execution", ИзвлечьExecution(Ответ.Текст()));
Данные.Вставить("username", Логин);
Данные.Вставить("password", Пароль);
Данные.Вставить("_eventId", "submit");
Данные.Вставить("geolocation", "");
Данные.Вставить("submit", "Войти");
Данные.Вставить("rememberMe", "on");
Ответ = Сессия.ВызватьМетод("POST", Ответ.URL, Новый Структура("Данные", Данные));
Что при этом произойдет:
- Коннектор выполнит
GET
запрос к URLhttps://releases.1c.ru/total
- Сервер попросит выполнить запрос к URL
https://login.1c.ru/login?service=https%3A%2F%2Freleases.1c.ru%2Fpublic%2Fsecurity_check
- Коннектор сохранит полученные cookies и выполнит
GET
запрос к URLhttps://releases.1c.ru/total
- Сервер вернет форму, в которой нужно авторизоваться
- Извлечем данные из формы и отправим их на сервер вместе с нашим логином и паролем
- Коннектор выполнит
POST
запрос и отправит данные формы и ранее полученные cookies - Сервер проверит параметры формы и если все хорошо, то выдаст тикет и попросит выполнить запрос к URL
https://releases.1c.ru/total
- Коннектор выполнит
GET
запрос к URLhttps://releases.1c.ru/total
и передаст установленные ранее cookies - Сервер вернет нужный нам результат в виде
html
Далее используя Сессия
можно выполнять запросы к серверу и скачивать обновления.
Коннектор может автоматически выполнять повторные попытки соединения/отправки запроса с задержкой. Это бывает полезно если:
- Соединение нестабильное
- Сервер перегружен и может "пятисотить"
- Сервер находится на обслуживании (перезагрузка, изменение конфигов, обновление и т.п.)
- Сервер ограничивает количество запросов от клиента
Включить повторы можно с помощью параметра ДополнительныеПараметры.МаксимальноеКоличествоПовторов
, задав значение больше 0.
Параметр ДополнительныеПараметры.МаксимальноеВремяПовторов
позволяет ограничить суммарное время (таймауты + задержки между попытками).
Значение по умолчанию: 10 мин.
Длительность задержки между попытками:
- Растет экспоненциально (1 сек, 2 сек, 4 сек, 8 сек, 16 сек, ...). Можно регулировать с помощью параметра
ДополнительныеПараметры.КоэффициентЭкспоненциальнойЗадержки
- Для кодов состояний
413
,429
или503
в качестве задержки используется значение заголовкаRetry-After
(длительность в секундах или конкретная дата).
Параметр ДополнительныеПараметры.ПовторятьДляКодовСостояний
позволяет задать коды состояний, при которых нужно выполнять повтор.
Если параметр не задан, повтор будет выполняться для всех кодов состояний >=500
.
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("МаксимальноеКоличествоПовторов", 5);
ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
URL = "http://127.0.0.1:5000/retry_after_date";
Ответ = КоннекторHTTP.Get(URL, Неопределено, ДополнительныеПараметры);