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