Skip to content

Commit

Permalink
Merge pull request #130 from Stivo182/fix/data-binary
Browse files Browse the repository at this point in the history
Исправление неверной интерпретации опции --data-binary
  • Loading branch information
Stivo182 authored Jan 15, 2025
2 parents 42a6b9f + 96113cd commit 819ab8d
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -323,14 +323,21 @@

ПрочитанныеФайлы.Очистить();

ТребуетсяПрочитатьФайлыТелаЗапроса = ТребуетсяПрочитатьФайлыТелаЗапроса();

НомерФайла = 1;
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл

Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
Продолжить;
КонецЕсли;

Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса
И Не ТребуетсяПрочитатьФайлыТелаЗапроса Тогда
Продолжить;
КонецЕсли;

ИмяПеременной = "ТекстовыеДанныеИзФайла_" + Формат(НомерФайла, "ЧГ=");

Конструктор.ДобавитьПустуюСтроку();
Expand Down Expand Up @@ -589,9 +596,9 @@
ЭтоПервыйФайл = Истина;
Для Каждого ПередаваемыйФайл Из Файлы Цикл

Если ПередаваемыйФайл.ПрочитатьСодержимое
Или ПередаваемыйФайл.ОтправлятьОтдельно
Или Не ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
Если ПередаваемыйФайл.ОтправлятьОтдельно
Или Не ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса
Или ПередаваемыйФайлПрочитан(ПередаваемыйФайл) Тогда
Продолжить;
КонецЕсли;

Expand Down Expand Up @@ -740,4 +747,40 @@
Возврат URL;
КонецФункции

Функция ПередаваемыйФайлПрочитан(ПередаваемыйФайл)

Если Не ПередаваемыйФайл.ПрочитатьСодержимое Тогда
Возврат Ложь;
КонецЕсли;

Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
Если ПрочитанныйФайл.ПередаваемыйФайл = ПередаваемыйФайл Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;

Возврат Ложь;

КонецФункции

Функция ТребуетсяПрочитатьФайлыТелаЗапроса()

КоличествоФайлов = 0;
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
Если ПередаваемыйФайл.ПрочитатьСодержимое
И ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
КоличествоФайлов = КоличествоФайлов + 1;
КонецЕсли;
КонецЦикла;

ЕстьОтправляемыеТекстовыеДанные = ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Количество() > 0;
Если КоличествоФайлов <= 1
И Не ЕстьОтправляемыеТекстовыеДанные Тогда
Возврат Ложь;
КонецЕсли;

Возврат Истина;

КонецФункции

#КонецОбласти
15 changes: 9 additions & 6 deletions src/core/Классы/КонвертерКомандыCURL.os
Original file line number Diff line number Diff line change
Expand Up @@ -459,13 +459,16 @@
МассивДанных = ЗначениеОпции(Команда, "data-binary");
Назначение = НазначениеПередаваемыхДанныхPOST(Команда);

Для Каждого ИмяФайла Из МассивДанных Цикл
Если Лев(ИмяФайла, 1) = "@" Тогда
ИмяФайла = Сред(ИмяФайла, 2);
Для Каждого Данные Из МассивДанных Цикл
Если Лев(Данные, 1) = "@" Тогда
ИмяФайла = Сред(Данные, 2);
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение);
ПередаваемыйФайл.ПрочитатьСодержимое = Истина;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
Иначе
ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение);
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
КонецЕсли;

ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение);
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
КонецЦикла;

КонецПроцедуры
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,9 @@
| --data 'param3=value3' \
| --data @path-to-file1 \
| --data @path-to-file2 \
| --data-raw '@at@at@'";
| --data-raw '@at@at@' \
| --data-binary @path-to-file3 \
| --data-binary 'param4=value4'";

ПрограммныйКод = "Заголовки = Новый Соответствие();
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
Expand All @@ -114,9 +116,14 @@
|ТекстовыеДанныеИзФайла_2 = СтрЗаменить(ТекстовыеДанныеИзФайла_2, Символы.ПС, """");
|ТекстовыеДанныеИзФайла_2 = СтрЗаменить(ТекстовыеДанныеИзФайла_2, Символы.ВК, """");
|
|ТелоЗапроса = ""param1=value1&парам2=значение2&param3=value3&@at@at@""
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file3"");
|ТекстовыеДанныеИзФайла_3 = ТекстовыйДокумент.ПолучитьТекст();
|
|ТелоЗапроса = ""param1=value1&парам2=значение2&param3=value3&@at@at@&param4=value4""
| + ""&"" + ТекстовыеДанныеИзФайла_1
| + ""&"" + ТекстовыеДанныеИзФайла_2;
| + ""&"" + ТекстовыеДанныеИзФайла_2
| + ""&"" + ТекстовыеДанныеИзФайла_3;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
Expand Down Expand Up @@ -172,7 +179,28 @@
КонецПроцедуры

&Тест
Процедура ТестДолжен_ПроверитьПередачуДвоичныхДанныхDataBinary() Экспорт
Процедура ТестДолжен_ПроверитьПередачуОдногоФайлаИзDataBinary() Экспорт

КонсольнаяКоманда = "curl http://example.com --data-binary @path-to-file1";

ПрограммныйКод = "Заголовки = Новый Соответствие();
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
|HTTPЗапрос.УстановитьИмяФайлаТела(""path-to-file1"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";

КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());

Ожидаем.Что(Результат).Равно(ПрограммныйКод);

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

&Тест
Процедура ТестДолжен_ПроверитьПередачуДвухФайловИзDataBinary() Экспорт

КонсольнаяКоманда = "curl http://example.com \
| --data-binary @path-to-file1 \
Expand All @@ -181,10 +209,20 @@
ПрограммныйКод = "Заголовки = Новый Соответствие();
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file1"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file2"");
|ТекстовыеДанныеИзФайла_2 = ТекстовыйДокумент.ПолучитьТекст();
|
|ТелоЗапроса = ТекстовыеДанныеИзФайла_1
| + ""&"" + ТекстовыеДанныеИзФайла_2;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
|HTTPЗапрос.УстановитьИмяФайлаТела(""path-to-file1"");
|// HTTPЗапрос.УстановитьИмяФайлаТела(""path-to-file2"");
|HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";

Expand Down

0 comments on commit 819ab8d

Please sign in to comment.