mirror of
https://github.com/vbondarevsky/Connector.git
synced 2024-11-24 08:42:15 +02:00
Разные правки
This commit is contained in:
parent
083748bba2
commit
c15e6a936b
@ -5,7 +5,7 @@
|
||||
Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.
|
||||
В общем библиотека очень мощная и проста в использовании.
|
||||
|
||||
В данной статье я расскажу о библиотеке Коннектор - “Requests” для мира 1С.
|
||||
В данной статье я расскажу о библиотеке Коннектор - "Requests" для мира 1С.
|
||||
|
||||
## Требования
|
||||
Платформа 8.3.10 и выше
|
||||
@ -35,7 +35,7 @@
|
||||
|
||||
```bsl
|
||||
// Коннектор
|
||||
Результат = КоннекторHTTP.РезультатКакJson(КоннекторHTTP.Get(“https://api.github.com/events));
|
||||
Результат = КоннекторHTTP.РезультатКакJson(КоннекторHTTP.Get("https://api.github.com/events"));
|
||||
```
|
||||
|
||||
Все! В ``Результат`` будут данные в структуре.
|
||||
|
@ -6,7 +6,7 @@
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Requests: HTTP для людей</v8:content>
|
||||
<v8:content>Коннектор: удобный HTTP-клиент для 1С:Предприятие 8</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Коннектор: удобный HTTP-клиент для 1С:Предприятие 8
|
||||
//
|
||||
// Copyright 2018 Vladimir Bondarevskiy
|
||||
// Copyright 2017-2019 Vladimir Bondarevskiy
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@ -285,14 +285,40 @@
|
||||
|
||||
#Область ФорматыОтветов
|
||||
|
||||
// TODO: Подготовить описание
|
||||
Функция КакJson(Ответ, ПараметрыПреобразования = Неопределено) Экспорт
|
||||
// Возвращает ответ сервера в виде десериализованного значения JSON.
|
||||
//
|
||||
// Параметры:
|
||||
// Ответ - Структура - ответ сервера на отправленный запрос.
|
||||
// См. описание возвращаемого значения ВызватьМетод.
|
||||
// ПараметрыПреобразованияJSON - Структура - задает параметры преобразования JSON.
|
||||
// *ПрочитатьВСоответствие - Булево - Если Истина, чтение объекта JSON будет выполнено в Соответствие.
|
||||
// Если Ложь, объекты будут считываться в объект типа Структура.
|
||||
// *ФорматДатыJSON - ФорматДатыJSON - формат, в котором представлена дата в строке, подлежащей преобразованию.
|
||||
// *ИменаСвойствСоЗначениямиДата - Массив, Строка - имена свойств JSON, для которых нужно вызывать восстановление даты из строки.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие - ответ сервера в виде десериализованного значения JSON.
|
||||
// Если ПараметрыПреобразования.ПрочитатьВСоответствие = Истина (по умолчанию).
|
||||
// Структура - если ПараметрыПреобразования.ПрочитатьВСоответствие = Ложь.
|
||||
//
|
||||
Функция КакJson(Ответ, ПараметрыПреобразованияJSON = Неопределено) Экспорт
|
||||
|
||||
Возврат JsonВОбъект(РаспаковатьОтвет(Ответ), Ответ.Кодировка, ПараметрыПреобразования);
|
||||
Возврат JsonВОбъект(РаспаковатьОтвет(Ответ), Ответ.Кодировка, ПараметрыПреобразованияJSON);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// TODO: Подготовить описание
|
||||
|
||||
// Возвращает ответ сервера в виде текста.
|
||||
//
|
||||
// Параметры:
|
||||
// Ответ - Структура - ответ сервера на отправленный запрос.
|
||||
// См. описание возвращаемого значения ВызватьМетод.
|
||||
// Кодировка - Строка, КодировкаТекста - определяет кодировку текста.
|
||||
// Если значение не задано, то кодировка извлекается из Ответ.Кодировка.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - ответ сервера в виде текста.
|
||||
//
|
||||
Функция КакТекст(Ответ, Кодировка = Неопределено) Экспорт
|
||||
|
||||
Если Не ЗначениеЗаполнено(Кодировка) Тогда
|
||||
@ -307,7 +333,15 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// TODO: Подготовить описание
|
||||
// Возвращает ответ сервера в двоичных данных.
|
||||
//
|
||||
// Параметры:
|
||||
// Ответ - Структура - ответ сервера на отправленный запрос.
|
||||
// См. описание возвращаемого значения ВызватьМетод.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - ответ сервера в виде двоичных данных.
|
||||
//
|
||||
Функция КакДвоичныеДанные(Ответ) Экспорт
|
||||
|
||||
Возврат РаспаковатьОтвет(Ответ);
|
||||
@ -499,8 +533,10 @@
|
||||
|
||||
Функция ПодготовитьЗапрос(Сессия, Запрос)
|
||||
|
||||
Cookies = ОбъединитьCookies(ДозаполнитьCookie(Сессия.Cookies, Запрос.URL), ДозаполнитьCookie(Запрос.Cookies, Запрос.URL));
|
||||
|
||||
ПодготовленныйЗапрос = Новый Структура;
|
||||
ПодготовленныйЗапрос.Вставить("Cookies", ОбъединитьCookies(Сессия.Cookies, Запрос.Cookies));
|
||||
ПодготовленныйЗапрос.Вставить("Cookies", Cookies);
|
||||
ПодготовленныйЗапрос.Вставить("Аутентификация", ОбъединитьПараметрыАутентификации(Запрос.Аутентификация, Сессия.Аутентификация));
|
||||
ПодготовленныйЗапрос.Вставить("Метод", Запрос.Метод);
|
||||
ПодготовленныйЗапрос.Вставить("Заголовки", ОбъединитьЗаголовки(Запрос.Заголовки, Сессия.Заголовки));
|
||||
@ -516,6 +552,32 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДозаполнитьCookie(Cookies, URL)
|
||||
|
||||
СтруктураURL = РазобратьURL(URL);
|
||||
НовыеCookies = Новый Массив;
|
||||
Если ТипЗнч(Cookies) = Тип("Массив") Тогда
|
||||
Для Каждого Cookie Из Cookies Цикл
|
||||
НовыйCookie = КонструкторCookie(Cookie.Наименование, Cookie.Значение);
|
||||
ЗаполнитьЗначенияСвойств(НовыйCookie, Cookie);
|
||||
|
||||
Если Не ЗначениеЗаполнено(НовыйCookie.Домен) Тогда
|
||||
НовыйCookie.Домен = СтруктураURL.Сервер;
|
||||
КонецЕсли;
|
||||
Если Не ЗначениеЗаполнено(НовыйCookie.Путь) Тогда
|
||||
НовыйCookie.Путь = "/";
|
||||
КонецЕсли;
|
||||
|
||||
НовыеCookies.Добавить(НовыйCookie);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат НовыеCookies;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Cookies;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДобавитьCookieВХранилище(ХранилищеCookies, Cookie, Замещать = Ложь)
|
||||
|
||||
Если ХранилищеCookies.Получить(Cookie.Домен) = Неопределено Тогда
|
||||
@ -777,11 +839,16 @@
|
||||
|
||||
Функция ПреобразоватьХранилищеCookiesВМассивCookies(ХранилищеCookies)
|
||||
|
||||
Если ТипЗнч(ХранилищеCookies) = Тип("Массив") Тогда
|
||||
Возврат ХранилищеCookies;
|
||||
КонецЕсли;
|
||||
|
||||
Cookies = Новый Массив;
|
||||
Если ТипЗнч(ХранилищеCookies) = Тип("Массив") Тогда
|
||||
Для Каждого Cookie Из ХранилищеCookies Цикл
|
||||
НоваяCookie = КонструкторCookie();
|
||||
ЗаполнитьЗначенияСвойств(НоваяCookie, Cookie);
|
||||
Cookies.Добавить(НоваяCookie);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Cookies;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Домен Из ХранилищеCookies Цикл
|
||||
Для Каждого Путь Из Домен.Значение Цикл
|
||||
@ -951,12 +1018,14 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КонструкторCookie(Наименование = Неопределено, Значение = Неопределено)
|
||||
Функция КонструкторCookie(Наименование = "", Значение = Неопределено)
|
||||
|
||||
Возврат Новый Структура(
|
||||
"Наименование, Значение, Домен, Порт, Путь, СрокДействия, ТолькоБезопасноеСоединение",
|
||||
"Наименование, Значение, Домен, Путь, Порт, СрокДействия, ТолькоБезопасноеСоединение",
|
||||
Наименование,
|
||||
Значение);
|
||||
Значение,
|
||||
"",
|
||||
"");
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -1,16 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.8">
|
||||
<ConfigVersions>
|
||||
<Metadata name="CommonModule.КоннекторHTTP" id="b410e6fc-2af6-4b78-8dde-12f5e259926c" configVersion="bb18baa94edb834094715282cdc15ada00000000"/>
|
||||
<Metadata name="CommonModule.КоннекторHTTP.Module" id="b410e6fc-2af6-4b78-8dde-12f5e259926c.0" configVersion="1fd3601b0986374b9a965ab2c5b9f52d00000000"/>
|
||||
<Metadata name="CommonModule.КоннекторHTTP" id="b410e6fc-2af6-4b78-8dde-12f5e259926c" configVersion="653243a768a69446996d4f9d35317d2100000000"/>
|
||||
<Metadata name="CommonModule.КоннекторHTTP.Module" id="b410e6fc-2af6-4b78-8dde-12f5e259926c.0" configVersion="960f358b88d4da4c9ab829cdb076395300000000"/>
|
||||
<Metadata name="Configuration.Конфигурация" id="5eb9462b-b393-47be-933f-eee461b0776c" configVersion="0057811e9f88644e913ddbfd3d54452500000000"/>
|
||||
<Metadata name="Configuration.Конфигурация.HomePageWorkArea" id="d50a38bd-46a7-49df-b1c1-97a268165f22.8" configVersion="11d0048f1adb354897dfaea6652a7af300000000"/>
|
||||
<Metadata name="Constant.Логин" id="8bd340d0-18e1-11e9-928d-9801a79f9261" configVersion="d3732e36a923e348b68566183995259000000000"/>
|
||||
<Metadata name="Constant.Пароль" id="a9b2d2d8-18e1-11e9-928d-9801a79f9261" configVersion="ad4a5526dac7ad4199ad90825436293800000000"/>
|
||||
<Metadata name="DataProcessor.Тесты" id="9f97ab24-5fa8-4904-97a8-ba436e571008" configVersion="086d14f0c756c643a110a24b61e6462000000000"/>
|
||||
<Metadata name="DataProcessor.Тесты.Form.Форма" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526" configVersion="9c88f1b8f051124d9ba2aa6a448c220800000000"/>
|
||||
<Metadata name="DataProcessor.Тесты.Form.Форма.Form" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526.0" configVersion="08af72e1dee7cd4bab9e6b3c732176e500000000"/>
|
||||
<Metadata name="DataProcessor.Тесты.ObjectModule" id="9f97ab24-5fa8-4904-97a8-ba436e571008.0" configVersion="f6cbcd9464cf36498dd79e635d4a9c3100000000"/>
|
||||
<Metadata name="DataProcessor.Тесты" id="9f97ab24-5fa8-4904-97a8-ba436e571008" configVersion="4e3c958cddc6d241893388163abbcc8c00000000">
|
||||
<Metadata name="DataProcessor.Тесты.Attribute.ТестироватьСоединениеЧерезПрокси" id="913b491d-b727-4b54-97ed-92de17157c7b"/>
|
||||
</Metadata>
|
||||
<Metadata name="DataProcessor.Тесты.Form.Форма" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526" configVersion="c4efbc25838ca941b0a1132f8692626500000000"/>
|
||||
<Metadata name="DataProcessor.Тесты.Form.Форма.Form" id="16f1d17a-2ee6-412e-8eb7-aaa7d4ff8526.0" configVersion="22a98ea1dd212a47896075258435216900000000"/>
|
||||
<Metadata name="DataProcessor.Тесты.ObjectModule" id="9f97ab24-5fa8-4904-97a8-ba436e571008.0" configVersion="7d90954588342a42b4fb0423dafdc36a00000000"/>
|
||||
<Metadata name="Language.Русский" id="f58d5f4e-e29f-439e-ae9f-58b2015e0061" configVersion="3d6c3937a27e474ab74385d3d524188800000000"/>
|
||||
</ConfigVersions>
|
||||
</ConfigDumpInfo>
|
@ -28,6 +28,40 @@
|
||||
<Explanation/>
|
||||
</Properties>
|
||||
<ChildObjects>
|
||||
<Attribute uuid="913b491d-b727-4b54-97ed-92de17157c7b">
|
||||
<Properties>
|
||||
<Name>ТестироватьСоединениеЧерезПрокси</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Тестировать соединение через прокси</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Type>
|
||||
<v8:Type>xs:boolean</v8:Type>
|
||||
</Type>
|
||||
<PasswordMode>false</PasswordMode>
|
||||
<Format/>
|
||||
<EditFormat/>
|
||||
<ToolTip/>
|
||||
<MarkNegatives>false</MarkNegatives>
|
||||
<Mask/>
|
||||
<MultiLine>false</MultiLine>
|
||||
<ExtendedEdit>false</ExtendedEdit>
|
||||
<MinValue xsi:nil="true"/>
|
||||
<MaxValue xsi:nil="true"/>
|
||||
<FillChecking>DontCheck</FillChecking>
|
||||
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||
<ChoiceParameterLinks/>
|
||||
<ChoiceParameters/>
|
||||
<QuickChoice>Auto</QuickChoice>
|
||||
<CreateOnInput>Auto</CreateOnInput>
|
||||
<ChoiceForm/>
|
||||
<LinkByType/>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
</Properties>
|
||||
</Attribute>
|
||||
<Form>Форма</Form>
|
||||
</ChildObjects>
|
||||
</DataProcessor>
|
||||
|
@ -1,8 +1,10 @@
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||||
|
||||
Процедура ВыполнитьТестыНаСервере() Экспорт
|
||||
|
||||
// Тест_СоединениеЧерезПрокси();
|
||||
|
||||
Если ТестироватьСоединениеЧерезПрокси Тогда
|
||||
Тест_СоединениеЧерезПрокси();
|
||||
КонецЕсли;
|
||||
Тест_ПередачаПараметровВСтрокуЗапроса();
|
||||
Тест_ПередачаПараметровВСтрокуЗапросаКомбинированный();
|
||||
Тест_РезультатКакJsonGet();
|
||||
@ -15,7 +17,7 @@
|
||||
Тест_Таймаут();
|
||||
Тест_BasicAuth();
|
||||
Тест_DigestAuth();
|
||||
Тест_ПолучитьGZip();
|
||||
Тест_ПолучитьGZip();
|
||||
Тест_GetJson();
|
||||
Тест_PostJson();
|
||||
Тест_GetJsonСтруктура();
|
||||
@ -31,16 +33,10 @@
|
||||
Тест_Head();
|
||||
Тест_Delete();
|
||||
Тест_Patch();
|
||||
|
||||
|
||||
Тест_УстановкаCookies();
|
||||
Тест_ОтправитьCookies();
|
||||
Тест_POST_MultipartFormData();
|
||||
|
||||
|
||||
|
||||
//Тест_ОтправитьCookies();
|
||||
|
||||
Тест_SetCookies();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Область Тесты
|
||||
@ -424,13 +420,30 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Тест_УстановкаCookies()
|
||||
|
||||
Результат = КоннекторHTTP.GetJson("http://httpbin.org/cookies/set/PHPSESSID/72a68cc1e55a4fbb9c0b8dbbeb49ca4f");
|
||||
|
||||
УтверждениеВерно(Результат["cookies"]["PHPSESSID"], "72a68cc1e55a4fbb9c0b8dbbeb49ca4f");
|
||||
|
||||
ТестПройден("Тест_УстановкаCookies");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Процедура Тест_ОтправитьCookies()
|
||||
|
||||
Cookies = Новый Массив;
|
||||
Cookies.Добавить(Новый Структура("Наименование,Значение", "k1", Строка(Новый УникальныйИдентификатор)));
|
||||
Cookies.Добавить(Новый Структура("Наименование,Значение", "k2", Строка(Новый УникальныйИдентификатор)));
|
||||
Ответ = КоннекторHTTP.Get("http://httpbin.org/cookies",, Новый Структура("Cookies", Cookies));
|
||||
Результат = КоннекторHTTP.КакJson(Ответ);
|
||||
|
||||
УтверждениеВерно(Результат["cookies"]["k1"], Cookies[0].Значение);
|
||||
УтверждениеВерно(Результат["cookies"]["k2"], Cookies[1].Значение);
|
||||
|
||||
ТестПройден("Тест_ОтправитьCookies");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Тест_POST_MultipartFormData()
|
||||
|
||||
@ -457,45 +470,10 @@
|
||||
|
||||
|
||||
|
||||
Ответ = КоннекторHTTP.КакJson(КоннекторHTTP.Get("http://httpbin.org/gzip"));
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("Accept-Encoding", "gzip");
|
||||
Ответ =
|
||||
КоннекторHTTP.Get(
|
||||
"https://raw.githubusercontent.com/dscape/spell/master/test/resources/big.txt",
|
||||
,
|
||||
Новый Структура("Заголовки", Заголовки));
|
||||
|
||||
|
||||
ТестПройден("Тест_POST_MultipartFormData");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
|
||||
Процедура Тест_ОтправитьCookies()
|
||||
|
||||
Cookies = Новый Массив;
|
||||
Cookies.Добавить(Новый Структура("Наименование,Значение", "k1", Строка(Новый УникальныйИдентификатор)));
|
||||
Cookies.Добавить(Новый Структура("Наименование,Значение", "k2", Строка(Новый УникальныйИдентификатор)));
|
||||
Ответ = КоннекторHTTP.Get("http://httpbin.org/cookies",, Новый Структура("Cookies", Cookies));
|
||||
Результат = КоннекторHTTP.КакJson(Ответ);
|
||||
|
||||
УтверждениеВерно(Результат["k1"], Cookies["k1"]);
|
||||
УтверждениеВерно(Результат["k2"], Cookies["k2"]);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
|
||||
Процедура Тест_SetCookies()
|
||||
|
||||
Ответ = КоннекторHTTP.Get("http://httpbin.org/cookies/set?k2=v2&k1=v1");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
@ -1,7 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Form xmlns="http://v8.1c.ru/8.3/xcf/logform" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.8">
|
||||
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
|
||||
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
|
||||
<Autofill>false</Autofill>
|
||||
</AutoCommandBar>
|
||||
<ChildItems>
|
||||
<CheckBoxField name="ТестироватьСоединениеЧерезПрокси" id="3">
|
||||
<DataPath>Объект.ТестироватьСоединениеЧерезПрокси</DataPath>
|
||||
<TitleLocation>Right</TitleLocation>
|
||||
<CheckBoxType>Auto</CheckBoxType>
|
||||
<ContextMenu name="ТестироватьСоединениеЧерезПроксиКонтекстноеМеню" id="4"/>
|
||||
<ExtendedTooltip name="ТестироватьСоединениеЧерезПроксиРасширеннаяПодсказка" id="5"/>
|
||||
</CheckBoxField>
|
||||
<Button name="Команда1" id="1">
|
||||
<Type>UsualButton</Type>
|
||||
<CommandName>Form.Command.ВыполнитьТесты</CommandName>
|
||||
|
Loading…
Reference in New Issue
Block a user