refactor: Использование ЧтениеТекста вместо ТекстовыйДокумента (#134)

This commit is contained in:
Dmitry Ivanov
2025-01-16 19:09:41 +03:00
parent 2e6c394e5b
commit 543cad66ef
3 changed files with 267 additions and 215 deletions
@@ -1,6 +1,6 @@
#Использовать "../../internal"
Перем Конструктор;
Перем Конструктор; // см. КонструкторПрограммногоКода
Перем ИсходящиеОшибки; // Массив из Структура:
// * Текст - Строка - Текст ошибки
// * КритичнаяОшибка - Булево - Признак критичиной ошибки
@@ -18,9 +18,9 @@
// - ПередаваемыйФайл - см. ПередаваемыйФайл
// - ИмяПеременной - Строка
Перем ИспользуетсяПрокси; // Булево
Перем ТелоЗапросаСтрока; // Строка
Перем ЕстьТекстовоеТелоЗапроса; // Булево
Перем ВызванМетодПоТекущемуURL; // Булево
Перем ТелоЗапросаСтрока; // Строка
Перем МетодУстановкиТелаЗапроса; // Строка
#Область ПрограммныйИнтерфейс
@@ -39,8 +39,7 @@
ОписаниеЗапроса = Описание;
ИспользуетсяПрокси = Ложь;
ЕстьТекстовоеТелоЗапроса = Ложь;
ТелоЗапросаСтрока = "";
ВызванМетодПоТекущемуURL = Ложь;
ПрочитанныеФайлы.Очистить();
@@ -52,9 +51,11 @@
Конструктор = Новый КонструкторПрограммногоКода();
ОпределитьМетодУстановкиТелаЗапроса();
ВывестиЗаголовки();
ВывестиЧтениеФайлов();
ВывестиИнициализациюТекстовогоТелаЗапроса();
ДобавитьЧтениеФайлов();
ДобавитьДанныеЗапроса();
ВывестиЗащищенноеСоединение();
ВывестиИнициализациюПрокси();
@@ -74,11 +75,11 @@
Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда
ВывестиHTTPСоединение(СтруктураURL);
ВывестиВызовHTTPМетодаДляКаждогоФайла(ОписаниеРесурса);
ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса);
Если Не ВызванМетодПоТекущемуURL Тогда
ВывестиHTTPЗапрос(СтруктураURL);
ВывестиУстановкуТелаЗапроса(ОписаниеРесурса);
ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса);
ВывестиВызовHTTPМетода(ОписаниеРесурса);
КонецЕсли;
ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда
@@ -122,10 +123,8 @@
ИмяПараметраПрокси = "Прокси";
ИмяПараметраТелоЗапросаСтрока = "ТелоЗапроса";
ПрочитанныеФайлы = Новый Массив;
ПрочитанныеФайлы = Новый Массив();
ИспользуетсяПрокси = Ложь;
ЕстьТекстовоеТелоЗапроса = Ложь;
ТелоЗапросаСтрока = "";
ВызванМетодПоТекущемуURL = Ложь;
КонецПроцедуры
@@ -319,61 +318,6 @@
КонецПроцедуры
Процедура ВывестиЧтениеФайлов()
ПрочитанныеФайлы.Очистить();
ТребуетсяПрочитатьФайлыТелаЗапроса = ТребуетсяПрочитатьФайлыТелаЗапроса();
НомерФайла = 1;
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
Продолжить;
КонецЕсли;
Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса
И Не ТребуетсяПрочитатьФайлыТелаЗапроса Тогда
Продолжить;
КонецЕсли;
ИмяПеременной = "ТекстовыеДанныеИзФайла_" + Формат(НомерФайла, "ЧГ=");
Конструктор.ДобавитьПустуюСтроку();
Шаблон = "ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(%2);
|%1 = ТекстовыйДокумент.ПолучитьТекст();";
Если ПередаваемыйФайл.УдалятьПереносыСтрок Тогда
Шаблон = Шаблон + "
|%1 = СтрЗаменить(%1, Символы.ПС, """");
|%1 = СтрЗаменить(%1, Символы.ВК, """");";
КонецЕсли;
Если ПередаваемыйФайл.КодироватьСодержимое Тогда
Шаблон = Шаблон + "
|%1 = КодироватьСтроку(%1, СпособКодированияСтроки.URLВКодировкеURL);";
КонецЕсли;
Если ЗначениеЗаполнено(ПередаваемыйФайл.Ключ) Тогда
Шаблон = Шаблон + "
|%1 = """ + ПередаваемыйФайл.Ключ + "="" + %1;";
КонецЕсли;
Конструктор.ДобавитьСтроку(Шаблон,
ИмяПеременной,
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла));
ПрочитанныйФайл = Новый Структура("ПередаваемыйФайл, ИмяПеременной", ПередаваемыйФайл, ИмяПеременной);
ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
НомерФайла = НомерФайла + 1;
КонецЦикла;
КонецПроцедуры
Процедура ВывестиHTTPЗапрос(СтруктураURL)
ПараметрыФункции = Новый Массив;
@@ -462,71 +406,57 @@
КонецФункции
Процедура ВывестиИнициализациюТекстовогоТелаЗапроса()
ЭлементыТелаЗапросаДляВывода = Новый Массив;
КонкатенацияСПереносомСтрокиИРазделителя = "
| + ""%1"" + ";
КонкатенацияСПереносомСтроки = "
| + ";
Процедура ДобавитьЧтениеФайлов()
ОтправляемаяСтрока = "";
Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл
Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
ОтправляемаяСтрока = ОтправляемаяСтрока
+ ?(ОтправляемаяСтрока = "", "", ПередаваемыйТекст.РазделительТелаЗапроса)
+ ПередаваемыйТекст.Значение;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ОтправляемаяСтрока) Тогда
ЭлементыТелаЗапросаДляВывода.Добавить(Конструктор.ПараметрВСтроку(ОтправляемаяСтрока));
КонецЕсли;
ТребуетсяЧтениеФайловТелаЗапроса = Не МетодУстановкиТелаЗапроса = "ИзФайла";
Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
Если ЭлементыТелаЗапросаДляВывода.Количество() Тогда
Если Не ПустаяСтрока(ПрочитанныйФайл.ПередаваемыйФайл.РазделительТелаЗапроса) Тогда
ЭлементыТелаЗапросаДляВывода.Добавить(
СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителя, ПрочитанныйФайл.ПередаваемыйФайл.РазделительТелаЗапроса)
+ ПрочитанныйФайл.ИмяПеременной);
Иначе
ЭлементыТелаЗапросаДляВывода.Добавить(КонкатенацияСПереносомСтроки + ПрочитанныйФайл.ИмяПеременной);
КонецЕсли;
Иначе
ЭлементыТелаЗапросаДляВывода.Добавить(ПрочитанныйФайл.ИмяПеременной);
КонецЕсли;
ФайлыДляЧтения = Новый Массив();
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
Продолжить;
КонецЕсли;
Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса
И Не ТребуетсяЧтениеФайловТелаЗапроса Тогда
Продолжить;
КонецЕсли;
ФайлыДляЧтения.Добавить(ПередаваемыйФайл);
КонецЦикла;
КоличествоЭлементов = ЭлементыТелаЗапросаДляВывода.Количество();
Если КоличествоЭлементов = 0 Тогда
Возврат;
КонецЕсли;
Код = УниверсальныеБлокиКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
ЕстьТекстовоеТелоЗапроса = Истина;
Если КоличествоЭлементов = 1 Тогда
ТелоЗапросаСтрока = ЭлементыТелаЗапросаДляВывода[0];
Иначе
Если Не ПустаяСтрока(Код) Тогда
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("%1 = %2;",
ИмяПараметраТелоЗапросаСтрока,
СтрСоединить(ЭлементыТелаЗапросаДляВывода));
.ДобавитьСтроку(Код);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьДанныеЗапроса()
Процедура ВывестиУстановкуТелаЗапроса(ОписаниеРесурса)
ТелоЗапросаСтрока = "";
ТелоЗапроса = УниверсальныеБлокиКода.СборкаТелаЗапроса(
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
ПрочитанныеФайлы);
ВывестиУстановкуТелаЗапросаТекстовымиДанными();
ВывестиУстановкуТелаЗапросаИзФайла(ОписаниеРесурса);
Если ЗначениеЗаполнено(ТелоЗапроса) Тогда
Если СтрЧислоСтрок(ТелоЗапроса) = 1 Тогда
ТелоЗапросаСтрока = ТелоЗапроса;
Иначе
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("%1 = %2;", ИмяПараметраТелоЗапросаСтрока, ТелоЗапроса);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ВывестиВызовHTTPМетодаДляКаждогоФайла(ОписаниеРесурса)
Процедура ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса)
ДлинаИмениФайлаВКомментарии = 100;
@@ -575,9 +505,16 @@
КонецПроцедуры
Процедура ВывестиУстановкуТелаЗапросаТекстовымиДанными()
Процедура ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса)
ДобавитьУстановкуТелаЗапросаТекстовымиДанными();
ДобавитьУстановкуТелаЗапросаИзФайла(ОписаниеРесурса);
КонецПроцедуры
Процедура ДобавитьУстановкуТелаЗапросаТекстовымиДанными()
Если Не ЕстьТекстовоеТелоЗапроса Тогда
Если Не МетодУстановкиТелаЗапроса = "ИзСтроки" Тогда
Возврат;
КонецЕсли;
@@ -587,7 +524,11 @@
КонецПроцедуры
Процедура ВывестиУстановкуТелаЗапросаИзФайла(ОписаниеРесурса)
Процедура ДобавитьУстановкуТелаЗапросаИзФайла(ОписаниеРесурса)
Если Не МетодУстановкиТелаЗапроса = "ИзФайла" Тогда
Возврат;
КонецЕсли;
Файлы = Новый Массив();
ОбщегоНазначения.ДополнитьМассив(Файлы, ОписаниеЗапроса.Файлы);
@@ -763,7 +704,7 @@
КонецФункции
Функция ТребуетсяПрочитатьФайлыТелаЗапроса()
Процедура ОпределитьМетодУстановкиТелаЗапроса()
КоличествоФайлов = 0;
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
@@ -781,13 +722,14 @@
КонецЕсли;
КонецЦикла;
Если КоличествоФайлов <= 1
И Не ЕстьТекстовоеТелоЗапроса Тогда
Возврат Ложь;
Если КоличествоФайлов > 1 Или ЕстьТекстовоеТелоЗапроса Тогда
МетодУстановкиТелаЗапроса = "ИзСтроки";
ИначеЕсли КоличествоФайлов = 1 И Не ЕстьТекстовоеТелоЗапроса Тогда
МетодУстановкиТелаЗапроса = "ИзФайла";
Иначе
МетодУстановкиТелаЗапроса = "";
КонецЕсли;
Возврат Истина;
КонецФункции
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,127 @@
#Область ПрограммныйИнтерфейс
Функция ЧтениеТекстовыхФайлов(Файлы, ПрочитанныеФайлы) Экспорт
Конструктор = Новый КонструкторПрограммногоКода();
НомерФайла = 1;
Для Каждого ПередаваемыйФайл Из Файлы Цикл
Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
Продолжить;
КонецЕсли;
Если НомерФайла > 1 Тогда
Конструктор.ДобавитьПустуюСтроку();
КонецЕсли;
Шаблон = "ЧтениеТекста = Новый ЧтениеТекста(%2);
|%1 = ЧтениеТекста.Прочитать();";
Если ПередаваемыйФайл.УдалятьПереносыСтрок Тогда
Шаблон = Шаблон + "
|%1 = СтрЗаменить(%1, Символы.ПС, """");
|%1 = СтрЗаменить(%1, Символы.ВК, """");";
КонецЕсли;
Если ПередаваемыйФайл.КодироватьСодержимое Тогда
Шаблон = Шаблон + "
|%1 = КодироватьСтроку(%1, СпособКодированияСтроки.URLВКодировкеURL);";
КонецЕсли;
Если ЗначениеЗаполнено(ПередаваемыйФайл.Ключ) Тогда
Шаблон = Шаблон + "
|%1 = """ + ПередаваемыйФайл.Ключ + "="" + %1;";
КонецЕсли;
ИмяПеременной = "ТекстовыеДанныеФайла_" + Формат(НомерФайла, "ЧГ=");
Конструктор.ДобавитьСтроку(Шаблон,
ИмяПеременной,
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла));
ПрочитанныйФайл = Новый Структура();
ПрочитанныйФайл.Вставить("ПередаваемыйФайл", ПередаваемыйФайл);
ПрочитанныйФайл.Вставить("ИмяПеременной", ИмяПеременной);
ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
НомерФайла = НомерФайла + 1;
КонецЦикла;
Возврат Конструктор.ПолучитьРезультат();
КонецФункции
Функция СборкаТелаЗапроса(ТекстовыеДанные, ПрочитанныеФайлы) Экспорт
Конструктор = Новый КонструкторПрограммногоКода();
ТелоЗапроса = Новый Массив();
КонкатенацияСПереносомСтрокиИРазделителя = "
| + ""%1"" + %2";
КонкатенацияСПереносомСтроки = "
| + %1";
НуженРазделитель = Ложь;
МассивТекстовыхДанных = Новый Массив();
Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл
Если Не ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
Продолжить;
КонецЕсли;
Разделитель = ПередаваемыйТекст.РазделительТелаЗапроса;
Если НуженРазделитель И Не ПустаяСтрока(Разделитель) Тогда
МассивТекстовыхДанных.Добавить(Разделитель);
КонецЕсли;
МассивТекстовыхДанных.Добавить(ПередаваемыйТекст.Значение);
НуженРазделитель = Истина;
КонецЦикла;
Если МассивТекстовыхДанных.Количество() Тогда
ТелоЗапроса.Добавить(Конструктор.ПараметрВСтроку(СтрСоединить(МассивТекстовыхДанных)));
КонецЕсли;
Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
Если Не ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
Продолжить;
КонецЕсли;
Разделитель = ПередаваемыйФайл.РазделительТелаЗапроса;
Если НуженРазделитель Тогда
Если Не ПустаяСтрока(Разделитель) Тогда
Текст = СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителя,
ПередаваемыйФайл.РазделительТелаЗапроса,
ПрочитанныйФайл.ИмяПеременной);
ТелоЗапроса.Добавить(Текст);
Иначе
Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрочитанныйФайл.ИмяПеременной);
ТелоЗапроса.Добавить(Текст);
КонецЕсли;
Иначе
ТелоЗапроса.Добавить(ПрочитанныйФайл.ИмяПеременной);
КонецЕсли;
НуженРазделитель = Истина;
КонецЦикла;
Возврат СтрСоединить(ТелоЗапроса);
КонецФункции
#КонецОбласти
@@ -89,7 +89,7 @@
КонецПроцедуры
&Тест
Процедура ТестДолжен_ПроверитьПередачуТекстовыхДанных() Экспорт
Процедура ТестДолжен_ПроверитьПередачуТекстовыхДанныхИзАргументовИФайлов() Экспорт
КонсольнаяКоманда = "curl http://example.com \
| -d param1=value1 \
@@ -104,26 +104,23 @@
ПрограммныйКод = "Заголовки = Новый Соответствие();
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file1"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ПС, """");
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ВК, """");
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file2"");
|ТекстовыеДанныеИзФайла_2 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_2 = СтрЗаменить(ТекстовыеДанныеИзФайла_2, Символы.ПС, """");
|ТекстовыеДанныеИзФайла_2 = СтрЗаменить(ТекстовыеДанныеИзФайла_2, Символы.ВК, """");
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2"");
|ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_2 = СтрЗаменить(ТекстовыеДанныеФайла_2, Символы.ПС, """");
|ТекстовыеДанныеФайла_2 = СтрЗаменить(ТекстовыеДанныеФайла_2, Символы.ВК, """");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file3"");
|ТекстовыеДанныеИзФайла_3 = ТекстовыйДокумент.ПолучитьТекст();
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file3"");
|ТекстовыеДанныеФайла_3 = ЧтениеТекста.Прочитать();
|
|ТелоЗапроса = ""param1=value1&парам2=значение2&param3=value3&@at@at@&param4=value4""
| + ""&"" + ТекстовыеДанныеИзФайла_1
| + ""&"" + ТекстовыеДанныеИзФайла_2
| + ""&"" + ТекстовыеДанныеИзФайла_3;
| + ""&"" + ТекстовыеДанныеФайла_1
| + ""&"" + ТекстовыеДанныеФайла_2
| + ""&"" + ТекстовыеДанныеФайла_3;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
@@ -148,14 +145,13 @@
ПрограммныйКод = "Заголовки = Новый Соответствие();
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ПС, """");
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ВК, """");
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
|
|ТелоЗапроса = ""param=value""
| + ""&"" + ТекстовыеДанныеИзФайла_1;
| + ""&"" + ТекстовыеДанныеФайла_1;
|
|// Запрос 1. http://example1.com
|Соединение = Новый HTTPСоединение(""example1.com"", 80);
@@ -209,16 +205,14 @@
ПрограммныйКод = "Заголовки = Новый Соответствие();
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file1"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file2"");
|ТекстовыеДанныеИзФайла_2 = ТекстовыйДокумент.ПолучитьТекст();
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2"");
|ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
|
|ТелоЗапроса = ТекстовыеДанныеИзФайла_1
| + ""&"" + ТекстовыеДанныеИзФайла_2;
|ТелоЗапроса = ТекстовыеДанныеФайла_1
| + ""&"" + ТекстовыеДанныеФайла_2;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
@@ -384,29 +378,27 @@
&Тест
Процедура ТестДолжен_ПроверитьПередачуТекстовыхДанныхСКодированием() Экспорт
КонсольнаяКоманда = "curl 'http://example.com' \
КонсольнаяКоманда = "curl http://example.com \
| --data-urlencode name=val \
| --data-urlencode =encodethis& \
| --data-urlencode '=encodethis&' \
| --data-urlencode name@file \
| --data-urlencode @fileonly";
ПрограммныйКод = "Заголовки = Новый Соответствие();
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""file"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = КодироватьСтроку(ТекстовыеДанныеИзФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
|ТекстовыеДанныеИзФайла_1 = ""name="" + ТекстовыеДанныеИзФайла_1;
|ЧтениеТекста = Новый ЧтениеТекста(""file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
|ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1;
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""fileonly"");
|ТекстовыеДанныеИзФайла_2 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_2 = КодироватьСтроку(ТекстовыеДанныеИзФайла_2, СпособКодированияСтроки.URLВКодировкеURL);
|ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
|ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL);
|
|ТелоЗапроса = ""name=val&encodethis%26""
| + ""&"" + ТекстовыеДанныеИзФайла_1
| + ""&"" + ТекстовыеДанныеИзФайла_2;
| + ""&"" + ТекстовыеДанныеФайла_1
| + ""&"" + ТекстовыеДанныеФайла_2;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
@@ -469,16 +461,15 @@
| --data 'param2=value2' \
| --data @path-to-file";
ПрограммныйКод = "ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ПС, """");
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ВК, """");
ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|АдресРесурса = ""/?param1=value&param2=value2""
| + ""&"" + ТекстовыеДанныеИзФайла_1;
| + ""&"" + ТекстовыеДанныеФайла_1;
|HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
@@ -497,16 +488,15 @@
| --get \
| --data @path-to-file";
ПрограммныйКод = "ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ПС, """");
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ВК, """");
ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|АдресРесурса = ""/?""
| + ТекстовыеДанныеИзФайла_1;
| + ТекстовыеДанныеФайла_1;
|HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
@@ -527,16 +517,15 @@
| --data 'param2=value2' \
| --data @path-to-file";
ПрограммныйКод = "ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ПС, """");
|ТекстовыеДанныеИзФайла_1 = СтрЗаменить(ТекстовыеДанныеИзФайла_1, Символы.ВК, """");
ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|АдресРесурса = ""/?param3=value3&param1=value&param2=value2""
| + ""&"" + ТекстовыеДанныеИзФайла_1
| + ""&"" + ТекстовыеДанныеФайла_1
| + ""#page-1"";
|HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
|
@@ -789,22 +778,20 @@
| --url-query '+name=%20foo' \
| --url-query +@not-a-file";
ПрограммныйКод = "ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""file"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = КодироватьСтроку(ТекстовыеДанныеИзФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
|ТекстовыеДанныеИзФайла_1 = ""name="" + ТекстовыеДанныеИзФайла_1;
ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
|ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1;
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""fileonly"");
|ТекстовыеДанныеИзФайла_2 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_2 = КодироватьСтроку(ТекстовыеДанныеИзФайла_2, СпособКодированияСтроки.URLВКодировкеURL);
|ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
|ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL);
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|АдресРесурса = ""/?name=val&encodethis%26&name=%20foo&@not-a-file""
| + ""&"" + ТекстовыеДанныеИзФайла_1
| + ""&"" + ТекстовыеДанныеИзФайла_2;
| + ""&"" + ТекстовыеДанныеФайла_1
| + ""&"" + ТекстовыеДанныеФайла_2;
|HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
@@ -821,15 +808,14 @@
КонсольнаяКоманда = "curl http://example.com --url-query @fileonly";
ПрограммныйКод = "ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""fileonly"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ТекстовыеДанныеИзФайла_1 = КодироватьСтроку(ТекстовыеДанныеИзФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|АдресРесурса = ""/?""
| + ТекстовыеДанныеИзФайла_1;
| + ТекстовыеДанныеФайла_1;
|HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
@@ -1183,16 +1169,14 @@
|Заголовки.Вставить(""Content-Type"", ""application/json"");
|Заголовки.Вставить(""Accept"", ""application/json"");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file1"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file2"");
|ТекстовыеДанныеИзФайла_2 = ТекстовыйДокумент.ПолучитьТекст();
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2"");
|ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
|
|ТелоЗапроса = ТекстовыеДанныеИзФайла_1
| + ТекстовыеДанныеИзФайла_2;
|ТелоЗапроса = ТекстовыеДанныеФайла_1
| + ТекстовыеДанныеФайла_2;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
@@ -1264,12 +1248,11 @@
|Заголовки.Вставить(""Content-Type"", ""application/json"");
|Заголовки.Вставить(""Accept"", ""application/json"");
|
|ТекстовыйДокумент = Новый ТекстовыйДокумент();
|ТекстовыйДокумент.Прочитать(""path-to-file"");
|ТекстовыеДанныеИзФайла_1 = ТекстовыйДокумент.ПолучитьТекст();
|ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
|
|ТелоЗапроса = ""{""""drink"""": """"coffe"""", """"size"""": ""
| + ТекстовыеДанныеИзФайла_1;
| + ТекстовыеДанныеФайла_1;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);