Skip to content

Commit

Permalink
Ошибка обработки URL с параметрами запроса без значений #10, Отправка…
Browse files Browse the repository at this point in the history
… в запросе произвольных текстов, бинарных данных #11
  • Loading branch information
vbondarevsky committed Jul 4, 2019
1 parent 3ca0a04 commit 94aa7c1
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 16 deletions.
45 changes: 29 additions & 16 deletions src/CommonModules/КоннекторHTTP/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
//
// URL: https://github.com/vbondarevsky/Connector
// e-mail: [email protected]
// Версия: 1.1.8
// Версия: 1.1.9
//
// Требования: платформа 1С версии 8.3.10 и выше

Expand Down Expand Up @@ -729,10 +729,14 @@
Значения.Добавить(Параметр.Значение);
КонецЕсли;

Для Каждого Значение Из Значения Цикл
ЗначениеПараметра = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL);
ЧастиПараметрыЗапроса.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, ЗначениеПараметра));
КонецЦикла;
Если Параметр.Значение = Неопределено Тогда
ЧастиПараметрыЗапроса.Добавить(Параметр.Ключ);
Иначе
Для Каждого Значение Из Значения Цикл
ЗначениеПараметра = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL);
ЧастиПараметрыЗапроса.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, ЗначениеПараметра));
КонецЦикла;
КонецЕсли;
КонецЦикла;

Возврат СтрСоединить(ЧастиПараметрыЗапроса, "&");
Expand Down Expand Up @@ -883,10 +887,16 @@
ContentType = ЗакодироватьФайлы(HTTPЗапрос, Файлы, Данные);
ИначеЕсли ЗначениеЗаполнено(Данные) Тогда
ContentType = "application/x-www-form-urlencoded";
HTTPЗапрос.УстановитьТелоИзСтроки(
КодироватьПараметрыЗапроса(Данные),
КодировкаТекста.UTF8,
ИспользованиеByteOrderMark.НеИспользовать);
Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(Данные);
Иначе
Если ТипЗнч(Данные) = Тип("Строка") Тогда
Тело = Данные;
Иначе
Тело = КодироватьПараметрыЗапроса(Данные);
КонецЕсли;
HTTPЗапрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
КонецЕсли;
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Json) Тогда
ContentType = "application/json";
Expand Down Expand Up @@ -1468,17 +1478,20 @@
Запрос = РаскодироватьСтроку(Запрос, СпособКодированияСтроки.URLВКодировкеURL);
Для Каждого СтрокаКлючРавноПараметр Из СтрРазделить(Запрос, "&", Ложь) Цикл
КлючПараметр = СтрРазделить(СтрокаКлючРавноПараметр, "=");
Если ПараметрыЗапроса.Получить(КлючПараметр[0]) <> Неопределено Тогда
Если ТипЗнч(КлючПараметр[1]) = Тип("Массив") Тогда
ПараметрыЗапроса[КлючПараметр[0]].Добавить(КлючПараметр[1]);
Ключ = КлючПараметр[0];
Значение = ?(КлючПараметр.Количество() = 1, Неопределено, КлючПараметр[1]);

Если ПараметрыЗапроса.Получить(Ключ) <> Неопределено Тогда
Если ТипЗнч(Значение) = Тип("Массив") Тогда
ПараметрыЗапроса[Ключ].Добавить(Значение);
Иначе
Значения = Новый Массив;
Значения.Добавить(ПараметрыЗапроса[КлючПараметр[0]]);
Значения.Добавить(КлючПараметр[1]);
ПараметрыЗапроса[КлючПараметр[0]] = Значения;
Значения.Добавить(ПараметрыЗапроса[Ключ]);
Значения.Добавить(Значение);
ПараметрыЗапроса[Ключ] = Значения;
КонецЕсли;
Иначе
ПараметрыЗапроса.Вставить(КлючПараметр[0], КлючПараметр[1]);
ПараметрыЗапроса.Вставить(Ключ, Значение);
КонецЕсли;
КонецЦикла;

Expand Down
38 changes: 38 additions & 0 deletions src/DataProcessors/Тесты/Ext/ObjectModule.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
Тест_ОтправитьCookies();
Тест_POST_MultipartFormData_ТолькоФайл();
Тест_POST_MultipartFormData_ФайлыИПоляФормы();
Тест_ПараметрыЗапросаТолькоКлюч();
Тест_ОтправкаXml();

КонецПроцедуры

Expand Down Expand Up @@ -544,6 +546,42 @@

КонецПроцедуры

Процедура Тест_ПараметрыЗапросаТолькоКлюч()

Результат = КоннекторHTTP.GetJson("https://httpbin.org/get?key");
УтверждениеВерно(Результат["args"]["key"], "");

ТестПройден("Тест_ПараметрыЗапросаТолькоКлюч");

КонецПроцедуры

Процедура Тест_ОтправкаXml()

XML =
"<?xml version=""1.0"" encoding=""utf-8""?>
|<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
| <soap:Body>
| <GetCursOnDate xmlns=""http://web.cbr.ru/"">
| <On_date>2019-07-05</On_date>
| </GetCursOnDate>
| </soap:Body>
|</soap:Envelope>";

Заголовки = Новый Соответствие;
Заголовки.Вставить("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");

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
Expand Down

0 comments on commit 94aa7c1

Please sign in to comment.