diff --git "a/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" "b/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" index 8f89bf3..f7df5ae 100644 --- "a/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" +++ "b/src/CommonModules/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP/Ext/Module.bsl" @@ -17,7 +17,7 @@ // // URL: https://github.com/vbondarevsky/Connector // e-mail: vbondarevsky@gmail.com -// Версия: 1.1.8 +// Версия: 1.1.9 // // Требования: платформа 1С версии 8.3.10 и выше @@ -729,10 +729,14 @@ Значения.Добавить(Параметр.Значение); КонецЕсли; - Для Каждого Значение Из Значения Цикл - ЗначениеПараметра = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL); - ЧастиПараметрыЗапроса.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, ЗначениеПараметра)); - КонецЦикла; + Если Параметр.Значение = Неопределено Тогда + ЧастиПараметрыЗапроса.Добавить(Параметр.Ключ); + Иначе + Для Каждого Значение Из Значения Цикл + ЗначениеПараметра = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL); + ЧастиПараметрыЗапроса.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, ЗначениеПараметра)); + КонецЦикла; + КонецЕсли; КонецЦикла; Возврат СтрСоединить(ЧастиПараметрыЗапроса, "&"); @@ -883,10 +887,16 @@ ContentType = ЗакодироватьФайлы(HTTPЗапрос, Файлы, Данные); ИначеЕсли ЗначениеЗаполнено(Данные) Тогда ContentType = "application/x-www-form-urlencoded"; - HTTPЗапрос.УстановитьТелоИзСтроки( - КодироватьПараметрыЗапроса(Данные), - КодировкаТекста.UTF8, - ИспользованиеByteOrderMark.НеИспользовать); + Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда + HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Данные); + Иначе + Если ТипЗнч(Данные) = Тип("Строка") Тогда + Тело = Данные; + Иначе + Тело = КодироватьПараметрыЗапроса(Данные); + КонецЕсли; + HTTPЗапрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); + КонецЕсли; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(Json) Тогда ContentType = "application/json"; @@ -1468,17 +1478,20 @@ Запрос = РаскодироватьСтроку(Запрос, СпособКодированияСтроки.URLВКодировкеURL); Для Каждого СтрокаКлючРавноПараметр Из СтрРазделить(Запрос, "&", Ложь) Цикл КлючПараметр = СтрРазделить(СтрокаКлючРавноПараметр, "="); - Если ПараметрыЗапроса.Получить(КлючПараметр[0]) <> Неопределено Тогда - Если ТипЗнч(КлючПараметр[1]) = Тип("Массив") Тогда - ПараметрыЗапроса[КлючПараметр[0]].Добавить(КлючПараметр[1]); + Ключ = КлючПараметр[0]; + Значение = ?(КлючПараметр.Количество() = 1, Неопределено, КлючПараметр[1]); + + Если ПараметрыЗапроса.Получить(Ключ) <> Неопределено Тогда + Если ТипЗнч(Значение) = Тип("Массив") Тогда + ПараметрыЗапроса[Ключ].Добавить(Значение); Иначе Значения = Новый Массив; - Значения.Добавить(ПараметрыЗапроса[КлючПараметр[0]]); - Значения.Добавить(КлючПараметр[1]); - ПараметрыЗапроса[КлючПараметр[0]] = Значения; + Значения.Добавить(ПараметрыЗапроса[Ключ]); + Значения.Добавить(Значение); + ПараметрыЗапроса[Ключ] = Значения; КонецЕсли; Иначе - ПараметрыЗапроса.Вставить(КлючПараметр[0], КлючПараметр[1]); + ПараметрыЗапроса.Вставить(Ключ, Значение); КонецЕсли; КонецЦикла; diff --git "a/src/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" "b/src/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" index a8ccb4b..1cdeb28 100644 --- "a/src/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" +++ "b/src/DataProcessors/\320\242\320\265\321\201\321\202\321\213/Ext/ObjectModule.bsl" @@ -43,6 +43,8 @@ Тест_ОтправитьCookies(); Тест_POST_MultipartFormData_ТолькоФайл(); Тест_POST_MultipartFormData_ФайлыИПоляФормы(); + Тест_ПараметрыЗапросаТолькоКлюч(); + Тест_ОтправкаXml(); КонецПроцедуры @@ -544,6 +546,42 @@ КонецПроцедуры +Процедура Тест_ПараметрыЗапросаТолькоКлюч() + + Результат = КоннекторHTTP.GetJson("https://httpbin.org/get?key"); + УтверждениеВерно(Результат["args"]["key"], ""); + + ТестПройден("Тест_ПараметрыЗапросаТолькоКлюч"); + +КонецПроцедуры + +Процедура Тест_ОтправкаXml() + + XML = + " + | + | + | + | 2019-07-05 + | + | + |"; + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8"); + Заголовки.Вставить("SOAPAction", "http://web.cbr.ru/GetCursOnDate"); + Ответ = КоннекторHTTP.Post( + "https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx", + XML, + Новый Структура("Заголовки", Заголовки)); + + УтверждениеВерно(Ответ.КодСостояния, 200); + УтверждениеВерно(Ответ.Заголовки.Получить("Content-Type"), "text/xml; charset=utf-8"); + + ТестПройден("Тест_ОтправкаXml"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции