feat: Поддержка опций -o, --output #22

This commit is contained in:
Dmitry Ivanov
2024-11-16 00:51:50 +03:00
parent e947e4c6c7
commit b8530d7382
4 changed files with 85 additions and 19 deletions
@@ -1,4 +1,6 @@
Перем URL Экспорт; // Массив из Строка
Перем АдресаРесурсов Экспорт; // Массив из Структура
// - URL - Строка - Адрес ресурса
// - ИмяВыходногоФайла - Строка - Имя выходного файла
Перем Заголовки Экспорт; // Соответствие из КлючИЗначение
Перем Метод Экспорт; // Строка
Перем ИмяПользователя Экспорт; // Строка
@@ -13,7 +15,7 @@
Перем ПараметрыЗапроса Экспорт; // Массив из Строка
Процедура ПриСозданииОбъекта()
URL = Новый Массив;
АдресаРесурсов = Новый Массив;
Заголовки = Новый Соответствие();
Метод = "GET";
ИмяПользователя = "";
@@ -26,4 +28,18 @@
ИспользоватьСертификатыУЦИзХранилищаОС = Ложь;
ИмяФайлаСертификатовУЦ = "";
ПараметрыЗапроса = Новый Массив;
КонецПроцедуры
КонецПроцедуры
Процедура ДобавитьАдресРесурса(URL, ИмяВыходногоФайла = "") Экспорт
ОписаниеРесурса = НовоеОписаниеРесурса();
ОписаниеРесурса.URL = URL;
ОписаниеРесурса.ИмяВыходногоФайла = ИмяВыходногоФайла;
АдресаРесурсов.Добавить(ОписаниеРесурса);
КонецПроцедуры
Функция НовоеОписаниеРесурса()
Описание = Новый Структура();
Описание.Вставить("URL", "");
Описание.Вставить("ИмяВыходногоФайла", "");
Возврат Описание;
КонецФункции
@@ -33,9 +33,9 @@
Результат = "";
Для Каждого URL Из ОписаниеЗапроса.URL Цикл
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
СтруктураURL = Новый ПарсерURL(URL);
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
ВывестиЗаголовки();
ВывестиЗащищенноеСоединение(СтруктураURL);
@@ -44,7 +44,7 @@
ВывестиHTTPЗапрос(СтруктураURL);
ВывестиУстановкуТелаЗапросаТекстовымиДанными();
ВывестиУстановкуТелаЗапросаДвоичнымиДанными();
ВывестиВызовHTTPМетода();
ВывестиВызовHTTPМетода(ОписаниеРесурса.ИмяВыходногоФайла);
КонецЦикла;
@@ -357,17 +357,12 @@
КонецПроцедуры
Процедура ВывестиВызовHTTPМетода()
ИмяВыходногоФайла = "";
Процедура ВывестиВызовHTTPМетода(ИмяВыходногоФайла)
ПараметрыФункции = Новый Массив;
ПараметрыФункции.Добавить(ОбернутьКавычками(ОписаниеЗапроса.Метод));
ПараметрыФункции.Добавить(ИмяПараметраHTTPЗапрос);
Если ЗначениеЗаполнено(ИмяВыходногоФайла) Тогда
ПараметрыФункции.Добавить(ИмяВыходногоФайла);
КонецЕсли;
ПараметрыФункции.Добавить(ОбернутьКавычками(ИмяВыходногоФайла, Истина));
ВывестиСтроку(СтрШаблон("%1 = %2.ВызватьHTTPМетод(%3);",
ИмяПараметраHTTPОтвет,
@@ -34,6 +34,7 @@
Приложение.Опция("ca-native", Ложь, "Использование сертификатов УЦ из системного хранилища сертификатов операционной системы").Флаговый();
Приложение.Опция("cacert", "", "Файл сертификатов удостоверяющих центров").ТМассивСтрок();
Приложение.Опция("url-query", "", "Параметры строки запроса URL").ТМассивСтрок();
Приложение.Опция("o output", "", "Имя выходного файла").ТМассивСтрок();
УстановитьСтрокуИспользованияКоманды(Приложение);
Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
@@ -68,7 +69,7 @@
Процедура ВыполнитьКоманду(Команда) Экспорт
ПрочитатьURL(Команда);
ПрочитатьАдресаРесурсов(Команда);
ПрочитатьЗаголовки(Команда);
ПрочитатьПользователя(Команда);
ПрочитатьДанныеДляОтправки(Команда);
@@ -100,12 +101,25 @@
КонецПроцедуры
Процедура ПрочитатьURL(Команда)
Процедура ПрочитатьАдресаРесурсов(Команда)
ОписаниеЗапроса.URL = Команда.ЗначениеАргумента("URL");
МассивURL = Новый Массив;
ОбщегоНазначения.ДополнитьМассив(МассивURL, Команда.ЗначениеАргумента("URL"));
ОбщегоНазначения.ДополнитьМассив(МассивURL, Команда.ЗначениеОпции("url"));
Для Каждого АдресРесурса Из Команда.ЗначениеОпции("url") Цикл
ОписаниеЗапроса.URL.Добавить(АдресРесурса);
ИменаВыходныхФайлов = Команда.ЗначениеОпции("output");
КоличествоВыходныхФайлов = ИменаВыходныхФайлов.Количество();
Индекс = 0;
Для Каждого URL Из МассивURL Цикл
Индекс = Индекс + 1;
ИмяВыходногоФайла = "";
Если Индекс <= КоличествоВыходныхФайлов Тогда
ИмяВыходногоФайла = ИменаВыходныхФайлов[Индекс - 1];
КонецЕсли;
ОписаниеЗапроса.ДобавитьАдресРесурса(URL, ИмяВыходногоФайла);
КонецЦикла;
КонецПроцедуры
@@ -31,7 +31,9 @@
СписокТестов.Добавить("ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаИСертификатыУЦИзФайла");
СписокТестов.Добавить("ТестДолжен_ПроверитьПередачуПараметровЗапроса");
СписокТестов.Добавить("ТестДолжен_ПроверитьПередачуПараметровЗапросаТолькоИзФайла");
СписокТестов.Добавить("ТестДолжен_ПроверитьПередачуВыходногоФайла");
СписокТестов.Добавить("ТестДолжен_ПроверитьПередачуНесколькихВыходныхФайлов");
Возврат СписокТестов;
КонецФункции
@@ -609,4 +611,43 @@
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПередачуВыходногоФайла() Экспорт
КонсольнаяКоманда = "curl http://example.com -o file.html";
ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|HTTPЗапрос = Новый HTTPЗапрос(""/"");
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""file.html"");";
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПередачуНесколькихВыходныхФайлов() Экспорт
КонсольнаяКоманда = "curl \
| http://example.com/page1.html -o page1.html \
| http://example.com/page2.html --output page2.html";
ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|HTTPЗапрос = Новый HTTPЗапрос(""/page1.html"");
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""page1.html"");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
|HTTPЗапрос = Новый HTTPЗапрос(""/page2.html"");
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""page2.html"");";
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
КонецПроцедуры