Skip to content

Commit

Permalink
vbondarevsky#138 Исправлено кодирование параметров запроса
Browse files Browse the repository at this point in the history
  • Loading branch information
alexandr-yang committed Apr 10, 2024
1 parent a412f84 commit 070c7bf
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/en/CommonModules/HTTPConnector/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -1316,7 +1316,8 @@ Function EncodeRequestParameters(RequestParameters)
RequestParametersParts.Add(Parameter.Key);
Else
For Each Value In Values Do
ParameterValue = EncodeString(Value, StringEncodingMethod.URLEncoding);
ParameterValue = XMLString(Value);
ParameterValue = EncodeString(ParameterValue, StringEncodingMethod.URLEncoding);
RequestParametersParts.Add(StrTemplate("%1=%2", Parameter.Key, ParameterValue));
EndDo;
EndIf;
Expand Down
3 changes: 2 additions & 1 deletion src/ru/CommonModules/КоннекторHTTP/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -1510,7 +1510,8 @@
ЧастиПараметрыЗапроса.Добавить(Параметр.Ключ);
Иначе
Для Каждого Значение Из Значения Цикл
ЗначениеПараметра = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL);
ЗначениеПараметра = XMLСтрока(Значение);
ЗначениеПараметра = КодироватьСтроку(ЗначениеПараметра, СпособКодированияСтроки.КодировкаURL);

This comment has been minimized.

Copy link
@ChugunovAN

ChugunovAN Apr 10, 2024

В случае вызова из метода ЗакодироватьФайлы Content-Type=multipart/form-data, который не требует URLEncoded. Для корректного поведения необходимо опциональное исполнения этой строки.

This comment has been minimized.

Copy link
@alexandr-yang

alexandr-yang Apr 10, 2024

Author Owner

Возможно ты имеешь введу вызов из метода ПодготовитьТелоЗапроса, там есть вызов метода КодироватьПараметрыЗапроса.
Но тогда возникает вопрос, а почему он там вызывается, причем тут параметры вообще, если речь идет о теле запроса. Логика немного сломана.

This comment has been minimized.

Copy link
@ChugunovAN

ChugunovAN Apr 10, 2024

Для понимания предлагаю рассмотреть такой вызов:

	Данные.Вставить("date_created", ТекущаяДатаСеанса());
	Данные.Вставить("caption", ЗаголовокФото);
	Данные.Вставить("protect_content", Истина);
	Данные.Вставить("disable_notification", Ложь);
	
	ФайлДляОтправки = КоннекторHttp.НовыйОтправляемыйФайл(ИмяФайла, ИмяФайла, Фото.ПолучитьДвоичныеДанные(), "image/" + Фото.Формат());
	
	ПараметрыВызова = КоннекторHttp.НовыеПараметры();
	ПараметрыВызова.Таймаут = 2;
	ПараметрыВызова.Файлы.Добавить(ФайлДляОтправки);
	
	Ответ = КоннекторHttp.Post(Url, Данные, ПараметрыВызова);

В таком кейсе вызов метода КодироватьПараметрыЗапроса произойдет из метода ЗакодироватьФайлы.
И все значения из Данные будут URLEncoded в теле запроса с Content-Type=multipart/form-data.
А на стороне сервера никакого URLDecode не произойдет при таком Content-Type.
То есть все не ASCII символы останутся на стороне сервера URLEncoded.
Что нельзя считать корректным поведением.

ЧастиПараметрыЗапроса.Добавить(СтрШаблон("%1=%2", Параметр.Ключ, ЗначениеПараметра));
КонецЦикла;
КонецЕсли;
Expand Down

0 comments on commit 070c7bf

Please sign in to comment.