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

#62 Добавить метод КакXDTO (#63)

This commit is contained in:
Anton Ivanov 2021-06-28 16:04:31 +03:00 committed by GitHub
parent d008ec0315
commit aa75f39159
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 147 additions and 0 deletions

View File

@ -223,6 +223,12 @@ XML =
Результат = КоннекторHTTP.КакДвоичныеДанные(КоннекторHTTP.Get("http://httpbin.org/image/png"));
```
### Чтение ответа XML как XDTO
Метод `КакXDTO` преобразует ответ XML в `ОбъектXDTO`.
```bsl
Результат = КоннекторHTTP.КакXDTO(Ответ);
```
## GZip-кодирование тела запроса
**Коннектор** может автоматически сжимать тело запроса `GZip`.
Для этого нужно добавить заголовок `Content-Encoding` = `gzip`.

View File

@ -472,6 +472,44 @@
КонецФункции
// Возвращает ответ сервера в XDTO.
//
// Параметры:
// Ответ - Структура - ответ сервера на отправленный запрос.
// См. описание возвращаемого значения ВызватьМетод.
// ПараметрыЧтенияXML - ПараметрыЧтенияXML - Параметры чтения, которые будут использованы при чтении данных XML
// Подробнее см. в синтакс помощнике метод ЧтениеXML.ОткрытьПоток
// НаборСхемXML - НаборСхемXML - Набор схем XML, используемых при проверке читаемого документа XML.
// Если набор схем указан, но не проверен и включена проверка документа XML, то будет выполнена проверка набора схем
// Подробнее см. в синтакс помощнике метод ЧтениеXML.ОткрытьПоток
// Кодировка - Строка, КодировкаТекста - Позволяет задать кодировку.
// Подробнее см. в синтакс помощнике метод ЧтениеXML.ОткрытьПоток
//
// Возвращаемое значение:
// ОбъектXDTO - ОбъектXDTO, СписокXDTO - тип возвращаемого значения может быть любым
// из поддерживаемых сериализацию в XDTO
//
Функция КакXDTO(Ответ,
ПараметрыЧтенияXML = Неопределено,
НаборСхемXML = Неопределено,
Кодировка = Неопределено) Экспорт
ДвоичныеДанные = РаспаковатьОтвет(Ответ);
ПотокДляЧтения = ДвоичныеДанные.ОткрытьПотокДляЧтения();
Если Не ЗначениеЗаполнено(Кодировка) Тогда
Кодировка = Ответ.Кодировка;
КонецЕсли;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьПоток(ПотокДляЧтения, ПараметрыЧтенияXML, НаборСхемXML, Кодировка);
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Возврат ОбъектXDTO;
КонецФункции
#КонецОбласти
#Область ВспомогательныеФункции

View File

@ -190,6 +190,10 @@
<app:functionality>BackgroundAudioRecording</app:functionality>
<app:use>false</app:use>
</app:functionality>
<app:functionality>
<app:functionality>AllFilesAccess</app:functionality>
<app:use>false</app:use>
</app:functionality>
</UsedMobileApplicationFunctionalities>
<StandaloneConfigurationRestrictionRoles/>
<MobileApplicationURLs/>

View File

@ -71,6 +71,7 @@
Тесты.Добавить("Тест_POST_MultipartFormData_ФайлыИПоляФормы");
Тесты.Добавить("Тест_ПараметрыЗапросаТолькоКлюч");
Тесты.Добавить("Тест_ОтправкаXml");
Тесты.Добавить("Тест_ПрочитатьОтветКакXDTO");
Тесты.Добавить("Тест_СложныеПараметрыЗапроса");
Тесты.Добавить("Тест_PostПустойJson");
Если ТестироватьАутентификациюAWS4_HMAC_SHA256 Тогда
@ -823,6 +824,104 @@
КонецПроцедуры
Процедура Тест_ПрочитатьОтветКакXDTO() Экспорт
ТекстОтветXML = Тест_ПрочитатьОтветКакXDTO_ТекстОтветаXML();
ПолноеИмяФайла = ПолучитьИмяВременногоФайла("xml");
ФайлТекст = Новый ЗаписьТекста(ПолноеИмяФайла, КодировкаТекста.UTF8);
ФайлТекст.ЗаписатьСтроку(ТекстОтветXML);
ФайлТекст.Закрыть();
ДвоичныеДанныеОтвет = Новый ДвоичныеДанные(ПолноеИмяФайла);
УдалитьФайлы(ПолноеИмяФайла);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
ПодготовленныйОтвет = Новый Структура;
ПодготовленныйОтвет.Вставить("Тело", ДвоичныеДанныеОтвет);
ПодготовленныйОтвет.Вставить("Заголовки", Заголовки);
ПодготовленныйОтвет.Вставить("Кодировка", "UTF-8");
ОтветXDTO = КоннекторHTTP.КакXDTO(ПодготовленныйОтвет);
ОтветXDTO_Attachment = ОтветXDTO.Attachments.Attachment;
УтверждениеВерно(ТипЗнч(ОтветXDTO), Тип("ОбъектXDTO"));
УтверждениеВерно(ОтветXDTO.Id, "1642606");
УтверждениеВерно(ТипЗнч(ОтветXDTO_Attachment), Тип("СписокXDTO"));
УтверждениеВерно(ОтветXDTO_Attachment.Количество(), 2);
КонецПроцедуры
Функция Тест_ПрочитатьОтветКакXDTO_ТекстОтветаXML()
ТекстОтветXML = "
|<Document>
|<Id>1642606</Id>
|<TypeId>65</TypeId>
|<TypeName>Документ</TypeName>
|<DocumentTypeCode>DOCUMENT</DocumentTypeCode>
|<Description>Документ тест 00001 от 21.05.2021</Description>
|<BarcodeType>None</BarcodeType>
|<SenderId>12776</SenderId>
|<ReceiverId>48519</ReceiverId>
|<ParticipantId>12776</ParticipantId>
|<Status>Received</Status>
|<Date>2021-05-21T00:00:00</Date>
|<RequestSign>true</RequestSign>
|<Number>ТЕСТ 00001</Number>
|<IsMarked>false</IsMarked>
|<Created>2021-05-21T10:32:02</Created>
|<SendDate>2021-05-21T10:32:43</SendDate>
|<ReceiveDate>2021-05-21T10:32:43</ReceiveDate>
|<IsDocflowCompleted>false</IsDocflowCompleted>
|<Comment>ТЕСТ Документ </Comment>
|<Type>Document</Type>
|<FormType>Document</FormType>
|<SellerCode>ИдентификаторЭДООтправитель</SellerCode>
|<BuyerCode>ИдентификаторЭДОПолучатель</BuyerCode>
|<Filename>ФайлОсновной.xlsx</Filename>
|<ContractDescription />
|<IsRoaming>false</IsRoaming>
|<IsPrintable>false</IsPrintable>
|<Relations>
| <DocumentRelation>
| <Id>1642606</Id>
| <Description>Документ №ТЕСТ 00002 от 21.05.2021</Description>
| </DocumentRelation>
|</Relations>
|<StatusName>Получен</StatusName>
|<SenderName>ООО Отправитель</SenderName>
|<ReceiverName>ООО Получатель</ReceiverName>
|<ExistRouteSigner>false</ExistRouteSigner>
|<DocumentRelationType>Productive</DocumentRelationType>
|<Attachments>
| <Attachment>
| <Id>44624</Id>
| <Uuid>8711ca1b76794467ba74529d2bb01e3e</Uuid>
| <DocumentId>0</DocumentId>
| <Filename>ТестФайл.xlsx</Filename>
| <Content />
| </Attachment>
| <Attachment>
| <Id>44625</Id>
| <Uuid>f6d8e6cdcbf846f4b97d5ab8e18d1b79</Uuid>
| <DocumentId>0</DocumentId>
| <Filename>ТестФайл2.pdf</Filename>
| <Content />
| </Attachment>
|</Attachments>
|<StatusChanged>2021-05-21T10:32:44</StatusChanged>
|</Document>
|";
Возврат ТекстОтветXML;
КонецФункции
Процедура Тест_СложныеПараметрыЗапроса() Экспорт
Результат = КоннекторHTTP.GetJson(