1
0
mirror of https://github.com/vbondarevsky/Connector.git synced 2024-11-24 08:42:15 +02:00

Разные правки

This commit is contained in:
Vladimir 2019-01-28 03:44:38 +03:00
parent 083748bba2
commit c15e6a936b
7 changed files with 169 additions and 77 deletions

View File

@ -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"));
```
Все! В ``Результат`` будут данные в структуре.

View File

@ -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/>

View File

@ -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(Наименование = "", Значение = Неопределено)
Возврат Новый Структура(
"Наименование, Значение, Домен, Порт, Путь, СрокДействия, ТолькоБезопасноеСоединение",
"Наименование, Значение, Домен, Путь, Порт, СрокДействия, ТолькоБезопасноеСоединение",
Наименование,
Значение);
Значение,
"",
"");
КонецФункции

View File

@ -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>

View File

@ -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>

View File

@ -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");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -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>