mirror of
https://github.com/alei1180/curlone.git
synced 2025-11-24 22:53:34 +02:00
feat: Поддрержка опции --create-dirs (#45)
This commit is contained in:
@@ -92,6 +92,7 @@
|
||||
|o
|
||||
|output
|
||||
|output-dir
|
||||
|create-dirs
|
||||
|O
|
||||
|remote-name
|
||||
|remote-name-all
|
||||
@@ -483,6 +484,8 @@
|
||||
|
||||
Процедура ДобавитьВызовHTTPМетода(ОписаниеРесурса)
|
||||
|
||||
ДобавитьСозданиеКаталога(ОписаниеРесурса);
|
||||
|
||||
ПараметрыФункции = Новый Массив;
|
||||
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеРесурса.Метод));
|
||||
ПараметрыФункции.Добавить(ИмяПараметраHTTPЗапрос);
|
||||
@@ -499,6 +502,29 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьСозданиеКаталога(ОписаниеРесурса)
|
||||
|
||||
Если Не ЗначениеЗаполнено(ОписаниеРесурса.ИмяВыходногоФайла)
|
||||
Или Не ОписаниеЗапроса.СоздатьКаталогСохраненияФайлов Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Каталог = ОбщегоНазначения.КаталогФайла(ОписаниеРесурса.ИмяВыходногоФайла);
|
||||
|
||||
Если Не ПустаяСтрока(Каталог) Тогда
|
||||
ШаблонСозданияКаталога = "// Создание каталога по необходимости
|
||||
|Каталог = Новый Файл(""%1"");
|
||||
|Если Не Каталог.Существует() Тогда
|
||||
| СоздатьКаталог(Каталог.ПолноеИмя);
|
||||
|КонецЕсли;";
|
||||
|
||||
Конструктор
|
||||
.ДобавитьПустуюСтроку()
|
||||
.ДобавитьСтроку(ШаблонСозданияКаталога, Каталог);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса)
|
||||
|
||||
ДобавитьУстановкуТелаЗапросаТекстовымиДанными();
|
||||
|
||||
@@ -865,11 +865,15 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПрочитатьКаталогСохраненияФайлов()
|
||||
КаталогСохраненияФайлов = "";
|
||||
|
||||
КаталогСохраненияФайлов = "";
|
||||
Каталог = ПоследнееЗначениеОпции("output-dir");
|
||||
Если Не Каталог = Неопределено Тогда
|
||||
КаталогСохраненияФайлов = Каталог;
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеЗапроса.СоздатьКаталогСохраненияФайлов = УстановленФлагОпции("create-dirs");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПрочитатьАдресПрокси()
|
||||
@@ -1068,6 +1072,10 @@
|
||||
"output-dir",
|
||||
"Каталог сохранения файлов").ТМассивСтрок();
|
||||
|
||||
ДобавитьПоддерживаемуюОпцию(
|
||||
"create-dirs",
|
||||
"Создает каталог сохранения файла при необходимости").ТМассивБулево();
|
||||
|
||||
ДобавитьПоддерживаемуюОпцию(
|
||||
"O remote-name",
|
||||
"Извлечение имени выходного файла из URL").ТМассивБулево();
|
||||
@@ -1184,7 +1192,6 @@
|
||||
ДобавитьНеподдерживаемуюОпцию("C continue-at").ТМассивСтрок();
|
||||
ДобавитьНеподдерживаемуюОпцию("b cookie").ТМассивСтрок();
|
||||
ДобавитьНеподдерживаемуюОпцию("c cookie-jar").ТМассивСтрок();
|
||||
ДобавитьНеподдерживаемуюОпцию("create-dirs").ТМассивБулево();
|
||||
ДобавитьНеподдерживаемуюОпцию("create-file-mode").ТМассивСтрок();
|
||||
ДобавитьНеподдерживаемуюОпцию("crlf").ТМассивБулево();
|
||||
ДобавитьНеподдерживаемуюОпцию("crlfile").ТМассивСтрок();
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
Перем ОтправлятьКакMultipartFormData Экспорт; // Булево
|
||||
Перем AWS4 Экспорт; // Структура
|
||||
Перем ТокенBearer Экспорт; // Строка
|
||||
Перем СоздатьКаталогСохраненияФайлов Экспорт; // Булево
|
||||
|
||||
// Максимальное время ожидания на выполнение запроса
|
||||
Перем Таймаут Экспорт; // Число
|
||||
@@ -110,6 +111,7 @@
|
||||
ОтправлятьКакMultipartFormData = Ложь;
|
||||
AWS4 = НовыйAWS4();
|
||||
ТокенBearer = "";
|
||||
СоздатьКаталогСохраненияФайлов = Ложь;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЕстьДанныеПоНазначению(Назначение) Экспорт
|
||||
|
||||
@@ -7,17 +7,36 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога) Экспорт
|
||||
|
||||
Если ПустаяСтрока(ПутьКаталога) Тогда
|
||||
Возврат ПутьКаталога;
|
||||
КонецЕсли;
|
||||
|
||||
ДобавляемыйСимвол = ПолучитьРазделительПути();
|
||||
|
||||
Если СтрЗаканчиваетсяНа(ПутьКаталога, ДобавляемыйСимвол) Тогда
|
||||
|
||||
ПоследнийСимвол = Прав(ПутьКаталога, 1);
|
||||
|
||||
Если ПоследнийСимвол = "/" Или ПоследнийСимвол = "\" Тогда
|
||||
Возврат ПутьКаталога;
|
||||
Иначе
|
||||
Возврат ПутьКаталога + ДобавляемыйСимвол;
|
||||
КонецЕсли;
|
||||
|
||||
Разделитель = ?(СтрНайти(ПутьКаталога, "\"), "\", "/");
|
||||
|
||||
Возврат ПутьКаталога + Разделитель;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КаталогФайла(ПутьКФайлу) Экспорт
|
||||
|
||||
ИндексРазделителя1 = СтрНайти(ПутьКФайлу, "\", НаправлениеПоиска.СКонца);
|
||||
ИндексРазделителя2 = СтрНайти(ПутьКФайлу, "/", НаправлениеПоиска.СКонца);
|
||||
|
||||
ИндексРазделителя = Макс(ИндексРазделителя1, ИндексРазделителя2);
|
||||
|
||||
Если ИндексРазделителя Тогда
|
||||
Возврат Сред(ПутьКФайлу, 1, ИндексРазделителя - 1);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат "";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДополнитьИменемФайлаПутьURL(ПолноеИмяФайла, ПутьURL) Экспорт
|
||||
|
||||
@@ -917,16 +917,12 @@
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьКаталогСохраненияФайловИПереданноеИмяФайла() Экспорт
|
||||
|
||||
КаталогСохраненияОС = СтрЗаменить("/some/path", "/", ПолучитьРазделительПути());
|
||||
|
||||
КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path'";
|
||||
КонсольнаяКоманда = СтрЗаменить(КонсольнаяКоманда, "/some/path", КаталогСохраненияОС);
|
||||
КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path/'";
|
||||
|
||||
ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");";
|
||||
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());
|
||||
|
||||
ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
|
||||
|
||||
@@ -935,21 +931,85 @@
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьКаталогСохраненияФайловИИзвлеченноеИмяФайлаИзURL() Экспорт
|
||||
|
||||
КаталогСохраненияОС = СтрЗаменить("/some/path", "/", ПолучитьРазделительПути());
|
||||
|
||||
КонсольнаяКоманда = "curl http://example.com/about.html -O --output-dir '/some/path'";
|
||||
КонсольнаяКоманда = СтрЗаменить(КонсольнаяКоманда, "/some/path", КаталогСохраненияОС);
|
||||
КонсольнаяКоманда = "curl http://example.com/about.html -O --output-dir '/some/path/'";
|
||||
|
||||
ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");";
|
||||
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());
|
||||
|
||||
ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьСозданиеКаталогСохраненияФайлов() Экспорт
|
||||
|
||||
КонсольнаяКоманда = "curl http://example.com/about.html -o file.html --output-dir '/some/path/' --create-dirs
|
||||
|curl http://example.com/about.html -O --output-dir '/some/path/' --create-dirs
|
||||
|curl http://example.com/about.html -o '/some/path/file.html' --create-dirs
|
||||
|curl http://example.com/about.html -o '/some/path\file.html' --create-dirs";
|
||||
|
||||
ПрограммныйКод = "//////////////////////////////////////////////
|
||||
|// Команда #1.
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
||||
|
|
||||
|// Создание каталога по необходимости
|
||||
|Каталог = Новый Файл(""/some/path"");
|
||||
|Если Не Каталог.Существует() Тогда
|
||||
| СоздатьКаталог(Каталог.ПолноеИмя);
|
||||
|КонецЕсли;
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");
|
||||
|
|
||||
|//////////////////////////////////////////////
|
||||
|// Команда #2.
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
||||
|
|
||||
|// Создание каталога по необходимости
|
||||
|Каталог = Новый Файл(""/some/path"");
|
||||
|Если Не Каталог.Существует() Тогда
|
||||
| СоздатьКаталог(Каталог.ПолноеИмя);
|
||||
|КонецЕсли;
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");
|
||||
|
|
||||
|//////////////////////////////////////////////
|
||||
|// Команда #3.
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
||||
|
|
||||
|// Создание каталога по необходимости
|
||||
|Каталог = Новый Файл(""/some/path"");
|
||||
|Если Не Каталог.Существует() Тогда
|
||||
| СоздатьКаталог(Каталог.ПолноеИмя);
|
||||
|КонецЕсли;
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");
|
||||
|
|
||||
|//////////////////////////////////////////////
|
||||
|// Команда #4.
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/about.html"");
|
||||
|
|
||||
|// Создание каталога по необходимости
|
||||
|Каталог = Новый Файл(""/some/path"");
|
||||
|Если Не Каталог.Существует() Тогда
|
||||
| СоздатьКаталог(Каталог.ПолноеИмя);
|
||||
|КонецЕсли;
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path\file.html"");";
|
||||
|
||||
ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьПрокси() Экспорт
|
||||
|
||||
|
||||
Reference in New Issue
Block a user