mirror of
https://github.com/alei1180/curlone.git
synced 2026-06-21 01:30:38 +02:00
feat: Поддержка опций -o, --output #22
This commit is contained in:
@@ -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С());
|
||||
|
||||
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
|
||||
|
||||
КонецПроцедуры
|
||||
Reference in New Issue
Block a user