Skip to content

Примеры

Андрей Брызгалин edited this page Jul 26, 2022 · 19 revisions

Примеры использования библиотеки в коде.

Выполнение запросов различных типов

GET

// Для версии 1, на сервере или для внешнего соединения
Ответ = КлиентHTTPКлиентСервер.Получить("https://ya.ru");
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.Получить("https://ya.ru");

POST

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

Передача двоичных данных в теле запроса функцией ОтправитьДвоичныеДанные.

URI = "https://jsonplaceholder.typicode.com/posts";
Данные = ПолучитьДвоичныеДанныеИзСтроки("{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}");
Ответ = КлиентHTTPКлиентСервер.ОтправитьДвоичныеДанные(URI, Данные);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.ОтправитьДвоичныеДанные(URI, Данные);

Текстовые данные

Передача текстовых данных в теле запроса функцией ОтправитьТекст.

URI = "https://jsonplaceholder.typicode.com/posts";
Данные = "{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}";
Ответ = КлиентHTTPКлиентСервер.ОтправитьТекст(URI, Данные);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.ОтправитьТекст(URI, Данные);

Файл

Передача данных файла в теле запроса функцией ОтправитьФайл.

// В файле D:\temp\body.txt содержится строка (кодировка UTF-8):
//{"title": "foo", "body": "bar", "userId": 1}
URI = "https://jsonplaceholder.typicode.com/posts";
Данные = Новый Файл("D:\temp\body.txt");
Ответ = КлиентHTTPКлиентСервер.ОтправитьФайл(URI, Данные);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.ОтправитьФайл(URI, Данные);

application/x-www-form-urlencoded

Передача тела запроса в формате application/x-www-form-urlencoded функцией ОтправитьДанныеHTMLФормы. Требуется инициализация коллекции полей формы функцией НовыеПоляФормы. Поля добавляются функцией ДобавитьПолеHTMLФормы.

URI = "https://httpbin.org/post";
ПФ = КлиентHTTPКлиентСервер.НовыеПоляФормы();

Ответ = КлиентHTTPКлиентСервер
    .ДобавитьПолеHTMLФормы(ПФ, "user_name", "Имярек")
    .ДобавитьПолеHTMLФормы(ПФ, "role", "Сотрудник")
    .ОтправитьДанныеHTMLФормы(URI, ПФ);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер
    .ДобавитьПолеHTMLФормы(ПФ, "user_name", "Имярек")
    .ДобавитьПолеHTMLФормы(ПФ, "role", "Сотрудник")
    .ОтправитьДанныеHTMLФормы(URI, ПФ);

multipart/form-data

Передача тела запроса в формате multipart/form-data функцией ОтправитьДанныеФормы. Требуется инициализация коллекции полей формы функцией НовыеПоляФормы. Поля добавляются функциями ДобавитьПолеФормыТекст и ДобавитьПолеФормыФайл в зависимости от типа поля. Разделителю полей присваивается значение XMLСтрока(Новый УникальныйИдентификатор), если не указано явно.

URI = "https://httpbin.org/post";
ПФ = КлиентHTTPКлиентСервер.НовыеПоляФормы();
ФайлПоля = Новый Файл("C:\temp\1.png");

Ответ = КлиентHTTPКлиентСервер
    .ДобавитьПолеФормыФайл(ПФ, "my_file", ФайлПоля, ФайлПоля.Имя, КлиентHTTPСлужебный.ТипMIMEРасширенияФайла(ФайлПоля.Расширение))
    .ДобавитьПолеФормыТекст(ПФ, "user_name", "Имярек")
    .ОтправитьДанныеФормы(URI, ПФ);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер
    .ДобавитьПолеФормыФайл(ПФ, "my_file", ФайлПоля, ФайлПоля.Имя, КлиентHTTPСлужебный.ТипMIMEРасширенияФайла(ФайлПоля.Расширение))
    .ДобавитьПолеФормыТекст(ПФ, "user_name", "Имярек")
    .ОтправитьДанныеФормы(URI, ПФ);

При необходимости можно явно задать значение разделителя полей функцией УстановитьРазделительПолейФормы. Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

URI = "https://httpbin.org/post";
ПФ = КлиентHTTPКлиентСервер.НовыеПоляФормы();
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
ФайлПоля = Новый Файл("C:\temp\1.png");

Ответ = КлиентHTTPКлиентСервер
    .ДобавитьПолеФормыФайл(ПФ, "my_file", ФайлПоля, ФайлПоля.Имя, КлиентHTTPСлужебный.ТипMIMEРасширенияФайла(ФайлПоля.Расширение))
    .ДобавитьПолеФормыТекст(ПФ, "user_name", "Имярек")
    .УстановитьРазделительПолейФормы(ДП, "my_boundary")
    .ОтправитьДанныеФормы(URI, ПФ, ДП);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер
    .ДобавитьПолеФормыФайл(ПФ, "my_file", ФайлПоля, ФайлПоля.Имя, КлиентHTTPСлужебный.ТипMIMEРасширенияФайла(ФайлПоля.Расширение))
    .ДобавитьПолеФормыТекст(ПФ, "user_name", "Имярек")
    .УстановитьРазделительПолейФормы(ДП, "my_boundary")
    .ОтправитьДанныеФормы(URI, ПФ, ДП);

PUT

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

Передача двоичных данных в теле запроса функцией ЗаписатьДвоичныеДанные.

URI = "https://jsonplaceholder.typicode.com/posts";
Данные = ПолучитьДвоичныеДанныеИзСтроки("{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}");
Ответ = КлиентHTTPКлиентСервер.ЗаписатьДвоичныеДанные(URI, Данные);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.ЗаписатьДвоичныеДанные(URI, Данные);

Текстовые данные

Передача текстовых данных в теле запроса функцией ЗаписатьТекст.

URI = "https://jsonplaceholder.typicode.com/posts";
Данные = "{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}";
Ответ = КлиентHTTPКлиентСервер.ЗаписатьТекст(URI, Данные);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.ЗаписатьТекст(URI, Данные);

Файл

Передача данных файла в теле запроса функцией ЗаписатьФайл.

// В файле D:\temp\body.txt содержится строка (кодировка UTF-8):
//{"title": "foo", "body": "bar", "userId": 1}
URI = "https://jsonplaceholder.typicode.com/posts";
Данные = Новый Файл("D:\temp\body.txt");
Ответ = КлиентHTTPКлиентСервер.ЗаписатьФайл(URI, Данные);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.ЗаписатьФайл(URI, Данные);

DELETE

Запрос удаления данных функцией Удалить.

Ответ = КлиентHTTPКлиентСервер.Удалить("https://jsonplaceholder.typicode.com/posts/1");
ТекстСообщения = ?(
    Ответ.КодСостояния = КлиентHTTPПовтИсп.КодСостоянияУспешно(),
    "Успешно",
    "Не удалось DELETE"
);
Сообщить(ТекстСообщения);
// На клиенте c версии 2
Ответ = Ждать КлиентHTTPКлиентСервер.Удалить("https://jsonplaceholder.typicode.com/posts/1");

Конфигурирование запроса

Установка параметров запроса

Требуется инициализация коллекции параметров функцией НовыеПараметрыЗапроса. Параметры добавляются функцией ДобавитьПараметр.

Адрес = "https://evilinsult.com/generate_insult.php";

// Добавим параметры URL: ?lang=ru&type=json
ПЗ = КлиентHTTPКлиентСервер.НовыеПараметрыЗапроса();
Ответ = КлиентHTTPКлиентСервер
    .ДобавитьПараметр(ПЗ, "lang", "ru")
    .ДобавитьПараметр(ПЗ, "type", "json")
    .Получить(Адрес, ПЗ);
Текст = ПолучитьСтрокуИзДвоичныхДанных(Ответ.Тело);

Установка заголовков запроса

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры. Заголовки добавляются/изменяются функцией УстановитьЗаголовок.

URI = "https://jsonplaceholder.typicode.com/posts";
Данные = ПолучитьДвоичныеДанныеИзСтроки("{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}");
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьЗаголовок(ДП, "Content-Type", КлиентHTTPПовтИсп.ТипMIMEJSON())
    .ОтправитьДвоичныеДанные(URI, Данные, ДП);

Объект идентификатора ресурса

Объект идентификатора ресурса формируется функцией ОбъектИдентификатораРесурса.

// Объект будет равнозначен URI:
//https://evilinsult.com/generate_insult.php?lang=ru&type=json
ОИР = КлиентHTTPКлиентСервер.ОбъектИдентификатораРесурса("evilinsult.com", , "generate_insult.php?lang=ru&type=json");
Ответ = КлиентHTTPКлиентСервер.Получить(ОИР);

Тело ответа как строка

Функция ТелоОтветаКакТекст укажет попытаться преобразовать тело ответа в текст. Кодировка для преобразования будет использована из заголовков ответа. В случае отсутствия кодировки в заголовках ответа будет использована кодировка по умолчанию (функция КодировкаПоУмолчанию).

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .ТелоОтветаКакТекст(ДП)
    .Получить("https://ya.ru", , ДП);

Тело ответа как JSON

Функция ТелоОтветаКакJSON укажет попытаться преобразовать тело ответа в универсальную коллекцию 1С из JSON в соответствии с переданными параметрами.

Кодировка для преобразования будет использована из заголовков ответа. В случае отсутствия кодировки в заголовках ответа будет использована кодировка по умолчанию (функция КодировкаПоУмолчанию).

URI = "https://evilinsult.com/generate_insult.php?lang=ru&type=json";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .ТелоОтветаКакJSON(ДП)
    .Получить(URI, , ДП);

Тело ответа как XML

Функция ТелоОтветаКакXML укажет попытаться преобразовать тело ответа в поддерживающий сериализацию в XDTO тип из XML в соответствии с переданными параметрами.

Кодировка для преобразования будет использована из заголовков ответа. В случае отсутствия кодировки в заголовках ответа будет использована кодировка по умолчанию (функция КодировкаПоУмолчанию).

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .ТелоОтветаКакТекст(ДП)
    .Получить("http://www.cbr.ru/StaticHtml/File/92172/Valuta.xsd", , ДП);

СхемыXSDТекстом = Новый Массив;
СхемыXSDТекстом.Добавить(Ответ.Тело);

Ответ = КлиентHTTPКлиентСервер
    .ТелоОтветаКакXML(ДП, , СхемыXSDТекстом)
    .Получить("http://www.cbr.ru/scripts/XML_val.asp?d=0", , ДП);

Аутентификация

Basic

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры. Basic-аутентификация устанавливается функцией УстановитьBasicАвторизацию.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьBasicАвторизацию(ДП, "login", "password")
    .Получить("https://someserver.com/method", , ДП);

NTLM

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры. NTLM-аутентификация устанавливается функцией УстановитьNTLMАвторизацию.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьNTLMАвторизацию(ДП, "login", "password")
    .Получить("https://someserver.com/method", , ДП);

Digest

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры. Digest-аутентификация устанавливается функцией УстановитьDigestАвторизацию. Будет использована сессия, если это не настроено явно; устанавливается значение максимального количества перенаправлений равное 1.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьDigestАвторизацию(ДП, "login", "password")
    .Получить("http://192.168.1.1", , ДП);

Bearer

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры. Bearer-аутентификация устанавливается функцией УстановитьBearerАвторизацию.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьBearerАвторизацию(ДП, "token")
    .Получить("https://someserver.com/method", , ДП);

Переиспользование HTTP-соединения

Для ускорения выполнения цепочки запросов по одному и тому же соединению можно использовать режим переиспользования HTTP-соединения. При включённом режиме в конфигурацию выполнения запроса (дополнительные параметры) сохраняется настроенный объект типа HTTPСоединение и используется в дальнейших запросах.

При каждом вызове функции ПереиспользоватьСоединение очищается сохранённый Объект HTTP-соединения. Проверка соответствия конфигурации соединения текущего запроса и сохранённого HTTP-соединения не осуществляется.

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();

КлиентHTTPКлиентСервер.ПереиспользоватьСоединение(ДП);

// Первый после включения режима переиспользования запрос сохранит объект HTTP-соединения
Ответ = КлиентHTTPКлиентСервер.Получить("https://ya.ru", , ДП);

Для я = 1 По 100 Цикл
    ПЗ = КлиентHTTPКлиентСервер.НовыеПараметрыЗапроса();
    Ответ = КлиентHTTPКлиентСервер
        .ДобавитьПараметр(ПЗ, "nr", XMLСтрока(я))
        .Получить("https://ya.ru/", ПЗ, ДП); // объект HTTP-соединения будет переиспользован
КонецЦикла;

Режим хранения сессии

Вызов функции включает использование сессии запросов и хранение cookie. При включении сессии автоматически устанавливается значение максимального количества перенаправлений равное (по умолчанию) 10.

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();

КлиентHTTPКлиентСервер.ИспользоватьСессию(ДП);

Ответ1 = КлиентHTTPКлиентСервер.Получить("https://www.google.com/search?q=infostart", , ДП);
Ответ2 = КлиентHTTPКлиентСервер.Получить("https://play.google.com/store/search?q=infostart", , ДП);

Установка порога перенаправлений

Используется для автоматической обработки редиректов. Максимальное количество перенаправлений устанавливается функцией УстановитьПорогПеренаправлений. Будет использована сессия, если это не настроено явно.

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьПорогПеренаправлений(ДП, 2)
    .Получить("http://ya.ru", , ДП);

Установка MIME-типа тела запроса

Функция УстановитьТипMIME добавляет заголовок запроса Content-Type с переданным значением.

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

URI = "https://jsonplaceholder.typicode.com/posts";
Данные = "{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьТипMIME(ДП, КлиентHTTPПовтИсп.ТипMIMEJSON())
    .ОтправитьТекст(URI, Данные, ДП);

Установка кодировки тела запроса

Функция УстановитьКодировку добавляет к значению заголовка запроса Content-Type переданную кодировку. Если заголовок Content-Type не установлен явно, то функция УстановитьКодировку не повлияет на выполнение запроса.

URI = "https://jsonplaceholder.typicode.com/posts";
Данные = "{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьТипMIME(ДП, КлиентHTTPПовтИсп.ТипMIMEJSON())
    .УстановитьКодировку(ДП, КлиентHTTPПовтИсп.КодировкаUTF16())
    .ОтправитьТекст(URI, Данные, ДП);

Сжатие тела ответа

Функция УстановитьСжатиеОтветаGZIP добавляет заголовок запроса Accept-Encoding со значением gzip. Будет произведена попытка распаковать тело ответа: при успешной распаковке результат выполнения запроса будет содержать распакованные данные, иначе вызовется исключение.

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьСжатиеОтветаGZIP(ДП)
    .Получить("https://ya.ru", , ДП);

Настройка соединения

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

Установка порта

Функция УстановитьПорт устанавливает порт соединения. Имеет приоритет над значением, указанным в URI.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьПорт(ДП, 9090)
    .Получить("http://127.0.0.1:8080", , ДП);

Установка пользователя

Функция УстановитьПользователяСоединения устанавливает пользователя соединения. Имеет приоритет над значением, указанным в URI.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьПользователяСоединения(ДП, "login")
    .Получить("https://someserver.com/method", , ДП);

Установка пароля

Функция УстановитьПарольСоединения устанавливает пароль соединения. Имеет приоритет над значением, указанным в URI.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьПарольСоединения(ДП, "password")
    .Получить("https://someserver.com/method", , ДП);

Установка таймаута соединения

Функция УстановитьТаймаут устанавливает таймаут соединения.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьТаймаут(ДП, 10)
    .Получить("https://someserver.com/method", , ДП);

Использование защищённого соединения

Функция УстановитьЗащищенноеСоединение устанавливает использование объекта защищённого соединения OpenSSL, переданного в параметры.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьЗащищенноеСоединение(ДП, Новый ЗащищенноеСоединениеOpenSSL)
    .Получить("http://ya.ru", , ДП);

Использования аутентификации NTLM или Negotiate

Функция УстановитьИспользованиеАутентификацииОС устанавливает использование аутентификации NTLM или Negotiate по установленным пользователю и паролю соединения.

Для настройки аутентификации NTLM или Negotiate рекомендуется использовать функцию УстановитьNTLMАвторизацию.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьПользователяСоединения(ДП, "login")
    .УстановитьПарольСоединения(ДП, "password")
    .УстановитьИспользованиеАутентификацииОС(ДП, Истина)
    .Получить("https://someserver.com/method", , ДП);

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

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

Установка объекта прокси

Функция УстановитьПрокси устанавливает использование объекта прокси, переданного в параметры.

Прокси = Новый ИнтернетПрокси;
Прокси.Пользователь = "login";
Прокси.Пароль = "password";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьПрокси(ДП, Прокси)
    .Получить("https://someserver.com/method", , ДП);

Конфигурируемый прокси

Функция ИспользоватьПрокси установит соединение через прокси, настроенным в соответствии с переданными параметрами.

ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .ИспользоватьПрокси(ДП, "127.0.0.1", 8888)
    .Получить("https://someserver.com/method", , ДП);

Сохранение тела ответа в файл

Функция УстановитьИмяВыходногоФайла устанавливает имя файла, в который будет сохранено тело ответа.

Требуется инициализация конфигурации запроса функцией НовыеДополнительныеПараметры.

URI = "https://epic.gsfc.nasa.gov/archive/natural/2015/10/31/png/epic_1b_20151031074844.png";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();
Ответ = КлиентHTTPКлиентСервер
    .УстановитьИмяВыходногоФайла(ДП, "С:\tmp\pic.png")
    .Получить(Адрес, , ДП);
Clone this wiki locally