diff --git a/README.md b/README.md
index 3727ffa..aa62450 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ opm install curlone
## Использование
-### web приложение
+## web приложение
Запуск приложения:
@@ -58,12 +58,27 @@ curlone web -o -p 3333
>
>HTTPОтвет = Соединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
>```
+>
+>Код Connector
+>
+>```bsl
+>Заголовки = Новый Соответствие();
+>Заголовки.Вставить("X-Header", "value");
+>
+>Данные = Новый Соответствие();
+>Данные.Вставить("key", "value");
+>
+>ДополнительныеПараметры = Новый Структура();
+>ДополнительныеПараметры.Вставить("Заголовки", Заголовки);
+>
+>Результат = КоннекторHTTP.Post("https://httpbin.org/post", Данные, ДополнительныеПараметры);
+>```
Горячие клавиши:
* `ctrl + enter` - вызов команды `Конвертировать`
-### cli приложение
+## cli приложение
Синтаксис команды:
@@ -81,22 +96,47 @@ curlone convert <команда>
>
>Команда curlone
>
+>Код 1C
+>
+>```shell
+>curlone convert 1c https://httpbin.org/post --request POST -d "key=value" -H "X-Header: value"
+>```
+>
+>Код Connector
+>
>```shell
->curlone convert https://httpbin.org/post --request POST -d "key=value" -H "X-Header: value"
+>curlone convert connector https://httpbin.org/post --request POST -d "key=value" -H "X-Header: value"
>```
-### библиотека
+## библиотека
Пример использования:
-```bsl
-#Использовать curlone
-
-КонсольнаяКоманда = "curl https://httpbin.org/post --request POST -d ""key=value"" -H ""X-Header: value""";
-
-КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
-Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда);
-```
+>Код 1C
+>
+>```bsl
+>#Использовать curlone
+>
+>КонсольнаяКоманда = "curl https://httpbin.org/post --request POST -d ""key=value"" -H ""X-Header: value""";
+>
+>Генератор = Новый ГенераторПрограммногоКода1С();
+>
+>КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
+>Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор);
+>```
+>
+>Код Connector
+>
+>```bsl
+>#Использовать curlone
+>
+>КонсольнаяКоманда = "curl https://httpbin.org/post --request POST -d ""key=value"" -H ""X-Header: value""";
+>
+>Генератор = Новый ГенераторПрограммногоКодаКоннекторHTTP();
+>
+>КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
+>Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор);
+>```
## Особенности использования
diff --git a/autumn-properties.json b/autumn-properties.json
index 7b74e84..99c1a03 100644
--- a/autumn-properties.json
+++ b/autumn-properties.json
@@ -14,6 +14,6 @@
"cli": {
"ИмяПриложения": "curlone",
"ПолноеИмяПриложения": "Конвертер команды curl в код на языке 1С",
- "ВерсияПриложения": "1.0.0"
+ "ВерсияПриложения": "1.1.0"
}
}
\ No newline at end of file
diff --git a/lib.config b/lib.config
index 349cb72..d7f6140 100644
--- a/lib.config
+++ b/lib.config
@@ -1,5 +1,6 @@
-
-
+
+
+
\ No newline at end of file
diff --git a/packagedef b/packagedef
index 8b932ef..989f2f7 100644
--- a/packagedef
+++ b/packagedef
@@ -1,5 +1,5 @@
Описание.Имя("curlone")
- .Версия("1.0.0")
+ .Версия("1.1.0")
.Автор("Alexander Osadchy, Dmitry Ivanov, Gleb Bogachev")
.АдресАвтора("https://github.com/alei1180, https://github.com/Stivo182, https://github.com/pinkycat")
.Описание("Конвертер команды curl в код на языке 1С")
diff --git "a/src/cli/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\232\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213CURL.os" "b/src/cli/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\232\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213CURL.os"
new file mode 100644
index 0000000..ed74bb1
--- /dev/null
+++ "b/src/cli/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\321\213\320\271\320\232\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213CURL.os"
@@ -0,0 +1,119 @@
+#Использовать coloratos
+#Использовать "../../core"
+#Использовать "../../internal"
+
+Перем ВходящиеАргументы; // Массив из Строка
+Перем Генератор; // Объект генератора программного кода
+Перем РезультатКонвертации; // Строка
+
+#Область ПрограммныйИнтерфейс
+
+Процедура Конвертировать() Экспорт
+
+ Генератор = Неопределено;
+
+ Если Не НайденаКоманда() Тогда
+ ВызватьИсключение "Не найдена команда convert";
+ КонецЕсли;
+
+ ПодготовленныеАргументы = ПодготовитьАргументы();
+
+ Ошибки = Новый Массив();
+ КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
+
+ Попытка
+ РезультатКонвертации = КонвертерКомандыCURL.Конвертировать(ПодготовленныеАргументы, Генератор, Ошибки);
+ Исключение
+ РезультатКонвертации = "";
+ Ошибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())));
+ КонецПопытки;
+
+ Для Каждого Ошибка Из Ошибки Цикл
+ Цвет = ?(Ошибка.Критичная, "Красный", "Желтый");
+ ЦветнойВывод.Вывести("// ");
+ ЦветнойВывод.ВывестиСтроку(Ошибка.Текст, Цвет);
+ КонецЦикла;
+
+ Если ЗначениеЗаполнено(РезультатКонвертации) Тогда
+ Если Ошибки.Количество() Тогда
+ Консоль.Вывести(Символы.ПС);
+ КонецЕсли;
+
+ Консоль.Вывести(РезультатКонвертации);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция НайденаКоманда() Экспорт
+ Возврат ВходящиеАргументы.Количество() И НРег(ВходящиеАргументы[0]) = "convert";
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция ПолучитьРезультат() Экспорт
+ Возврат РезультатКонвертации;
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ПриСозданииОбъекта(Аргументы)
+ ВходящиеАргументы = Аргументы;
+ РезультатКонвертации = "";
+КонецПроцедуры
+
+Функция ПодготовитьАргументы()
+
+ ПодготовленныеАргументы = Новый Массив();
+ ОбщегоНазначения.ДополнитьМассив(ПодготовленныеАргументы, ВходящиеАргументы);
+
+ ПодготовленныеАргументы[0] = "curl";
+
+ ПрочитатьАргументГенератора(ПодготовленныеАргументы);
+ УдалитьПовторяющийАргументCurl(ПодготовленныеАргументы);
+
+ Возврат ПодготовленныеАргументы;
+
+КонецФункции
+
+Процедура УдалитьПовторяющийАргументCurl(Аргументы)
+
+ Если Аргументы.Количество() > 1 И НРег(Аргументы[1]) = "curl" Тогда
+ Аргументы.Удалить(1);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПрочитатьАргументГенератора(Аргументы)
+
+ ИндексАргумента = 1;
+
+ Если Аргументы.Количество() > ИндексАргумента Тогда
+ Аргумент = НРег(Аргументы[ИндексАргумента]);
+ Генератор = ПолучитьГенераторПоАргументу(Аргумент);
+ КонецЕсли;
+
+ Если Генератор = Неопределено Тогда
+ Генератор = ГенераторПоУмолчанию();
+ Иначе
+ Аргументы.Удалить(ИндексАргумента);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция ПолучитьГенераторПоАргументу(Аргумент)
+ Если Аргумент = "connector" Тогда
+ Возврат Новый ГенераторПрограммногоКодаКоннекторHTTP();
+ ИначеЕсли Аргумент = "1c" Тогда
+ Возврат Новый ГенераторПрограммногоКода1С();
+ КонецЕсли;
+КонецФункции
+
+Функция ГенераторПоУмолчанию()
+ Возврат Новый ГенераторПрограммногоКода1С();
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241.os"
index 6627638..9056f68 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241.os"
@@ -6,6 +6,13 @@
// * КритичнаяОшибка - Булево - Признак критичиной ошибки
Перем ОписаниеЗапроса; // см. ОписаниеЗапроса
+Перем ПрочитанныеФайлы; // Массив из Структура:
+ // - ПередаваемыйФайл - см. ПередаваемыйФайл
+ // - ИмяПеременной - Строка
+Перем ВызванМетодПоТекущемуURL; // Булево
+Перем ТелоЗапросаСтрока; // Строка
+Перем МетодУстановкиТелаЗапроса; // Строка
+
Перем ИмяПараметраЗаголовки; // Строка
Перем ИмяПараметраСоединение; // Строка
Перем ИмяПараметраЗащищенноеСоединение; // Строка
@@ -14,14 +21,6 @@
Перем ИмяПараметраПрокси; // Строка
Перем ИмяПараметраТелоЗапросаСтрока; // Строка
-Перем ПрочитанныеФайлы; // Массив из Структура:
- // - ПередаваемыйФайл - см. ПередаваемыйФайл
- // - ИмяПеременной - Строка
-Перем ИспользуетсяПрокси; // Булево
-Перем ВызванМетодПоТекущемуURL; // Булево
-Перем ТелоЗапросаСтрока; // Строка
-Перем МетодУстановкиТелаЗапроса; // Строка
-
#Область ПрограммныйИнтерфейс
// Генерирует программный код 1С из переданного описания запроса
@@ -37,66 +36,84 @@
// Строка - Программный код
Функция Получить(Описание, Ошибки = Неопределено) Экспорт
- ОписаниеЗапроса = Описание;
- ИспользуетсяПрокси = Ложь;
-
- ВызванМетодПоТекущемуURL = Ложь;
- ПрочитанныеФайлы.Очистить();
-
Если Ошибки = Неопределено Тогда
Ошибки = Новый Массив();
КонецЕсли;
+ ОписаниеЗапроса = Описание;
ИсходящиеОшибки = Ошибки;
-
Конструктор = Новый КонструкторПрограммногоКода();
-
+
+ ПрочитанныеФайлы.Очистить();
+
ОпределитьМетодУстановкиТелаЗапроса();
-
- ВывестиЗаголовки();
+ ДобавитьЗаголовки();
ДобавитьЧтениеФайлов();
ДобавитьДанныеЗапроса();
- ВывестиЗащищенноеСоединение();
- ВывестиИнициализациюПрокси();
-
- КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество();
- НомерЗапроса = 0;
- Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
-
- НомерЗапроса = НомерЗапроса + 1;
- СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
- ВызванМетодПоТекущемуURL = Ложь;
-
- Конструктор.ДобавитьПустуюСтроку();
-
- Если КоличествоURL > 1 Тогда
- Конструктор.ДобавитьКомментарий("Запрос %1. %2", НомерЗапроса, Лев(ОписаниеРесурса.URL, 100));
- КонецЕсли;
-
- Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда
- ВывестиHTTPСоединение(СтруктураURL);
- ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса);
+ ДобавитьЗащищенноеСоединение();
+ ДобавитьПрокси();
+ ДобавитьЗапросы();
- Если Не ВызванМетодПоТекущемуURL Тогда
- ВывестиHTTPЗапрос(СтруктураURL);
- ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса);
- ВывестиВызовHTTPМетода(ОписаниеРесурса);
- КонецЕсли;
- ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда
- ВывестиFTPСоединение(СтруктураURL);
- ВывестиВызовFTPМетода(ОписаниеРесурса, СтруктураURL);
- Иначе
- ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема);
- ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
- КонецЕсли;
+ Возврат Конструктор.ПолучитьРезультат();
- Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
- Возврат "";
- КонецЕсли;
+КонецФункции
- КонецЦикла;
+#КонецОбласти
- Возврат Конструктор.ПолучитьРезультат();
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция ПоддерживаемыеОпции() Экспорт
+
+ ПоддерживаемыеОпции = "url
+ |H
+ |header
+ |X
+ |request
+ |u
+ |user
+ |d
+ |data
+ |data-ascii
+ |data-raw
+ |data-binary
+ |data-urlencode
+ |T
+ |upload-file
+ |G
+ |get
+ |I
+ |head
+ |E
+ |cert
+ |ca-native
+ |cacert
+ |url-query
+ |o
+ |output
+ |output-dir
+ |O
+ |remote-name
+ |remote-name-all
+ |x
+ |proxy
+ |U
+ |proxy-user
+ |proxy-basic
+ |proxy-ntlm
+ |m
+ |max-time
+ |connect-timeout
+ |json
+ |A
+ |user-agent
+ |oauth2-bearer
+ |ftp-pasv
+ |P
+ |ftp-port
+ |l
+ |list-only";
+
+ Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь);
КонецФункции
@@ -124,31 +141,89 @@
ИмяПараметраТелоЗапросаСтрока = "ТелоЗапроса";
ПрочитанныеФайлы = Новый Массив();
- ИспользуетсяПрокси = Ложь;
- ВызванМетодПоТекущемуURL = Ложь;
КонецПроцедуры
-Функция ПолучитьПорт(СтруктураURL)
+Процедура ДобавитьЗаголовки()
+
+ Если Не ОписаниеЗапроса.Заголовки.Количество() Тогда
+ Возврат;
+ КонецЕсли;
- Порт = СтруктураURL.Порт;
- Если Не ЗначениеЗаполнено(Порт) Тогда
- Если СтруктураURL.Схема = ПротоколыURL.HTTPS Тогда
- Порт = 443;
- ИначеЕсли СтруктураURL.Схема = ПротоколыURL.HTTP Тогда
- Порт = 80;
- ИначеЕсли СтруктураURL.Схема = ПротоколыURL.FTPS Тогда
- Порт = 990;
- ИначеЕсли СтруктураURL.Схема = ПротоколыURL.FTP Тогда
- Порт = 21;
+ Конструктор.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки);
+
+ Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл
+ ПараметрыФункции = Новый Массив();
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ));
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение));
+
+ Конструктор.ДобавитьСтроку("%1.Вставить(%2);",
+ ИмяПараметраЗаголовки,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьЧтениеФайлов()
+
+ Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТребуетсяЧтениеФайловТелаЗапроса = Не МетодУстановкиТелаЗапроса = "ИзФайла";
+
+ ФайлыДляЧтения = Новый Массив();
+ Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
+
+ Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
+ Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса
+ И Не ТребуетсяЧтениеФайловТелаЗапроса Тогда
+ Продолжить;
КонецЕсли;
+
+ ФайлыДляЧтения.Добавить(ПередаваемыйФайл);
+
+ КонецЦикла;
+
+ Код = КоллекцияПрограммногоКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
+
+ Если Не ПустаяСтрока(Код) Тогда
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку(Код);
КонецЕсли;
- Возврат Порт;
+КонецПроцедуры
-КонецФункции
+Процедура ДобавитьДанныеЗапроса()
+
+ Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТелоЗапросаСтрока = "";
+ ТелоЗапроса = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку(
+ НазначенияПередаваемыхДанных.ТелоЗапроса,
+ ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
+ ПрочитанныеФайлы);
+
+ Если ЗначениеЗаполнено(ТелоЗапроса) Тогда
+ Если СтрЧислоСтрок(ТелоЗапроса) = 1 Тогда
+ ТелоЗапросаСтрока = ТелоЗапроса;
+ Иначе
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("%1 = %2;", ИмяПараметраТелоЗапросаСтрока, ТелоЗапроса);
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
-Процедура ВывестиЗащищенноеСоединение()
+Процедура ДобавитьЗащищенноеСоединение()
ИспользуетсяЗащищенноеСоединение = Ложь;
@@ -204,21 +279,13 @@
КонецПроцедуры
-Процедура ВывестиИнициализациюПрокси()
+Процедура ДобавитьПрокси()
- ИспользуетсяПрокси = ЗначениеЗаполнено(ОписаниеЗапроса.ПроксиСервер);
-
- Если Не ИспользуетсяПрокси Тогда
+ Если Не ОписаниеЗапроса.ИспользуетсяПрокси() Тогда
Возврат;
КонецЕсли;
- ДопустимыеПротоколыПрокси = Новый Массив();
- ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTP);
- ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTPS);
- ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTP);
- ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTPS);
-
- Если ДопустимыеПротоколыПрокси.Найти(ОписаниеЗапроса.ПроксиПротокол) = Неопределено Тогда
+ Если Не ОбщегоНазначения.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда
ТекстОшибки = СтрШаблон("Прокси протокол %1 не поддерживается", ОписаниеЗапроса.ПроксиПротокол);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
@@ -226,238 +293,69 @@
Конструктор
.ДобавитьПустуюСтроку()
- .ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметраПрокси);
-
- ИспользоватьАутентификациюОС = ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM;
-
- ПараметрыФункции = Новый Массив;
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиПротокол));
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиСервер));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПорт));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПользователь));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПароль));
- ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина
-
- Конструктор.ДобавитьСтроку("%1.Установить(%2);",
- ИмяПараметраПрокси,
- Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+ .ДобавитьСтроку(КоллекцияПрограммногоКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
КонецПроцедуры
-Процедура ВывестиHTTPСоединение(СтруктураURL)
-
- Таймаут = 0;
- Если ЗначениеЗаполнено(ОписаниеЗапроса.Таймаут) И ЗначениеЗаполнено(ОписаниеЗапроса.ТаймаутСоединения) Тогда
- Таймаут = ОписаниеЗапроса.Таймаут + ОписаниеЗапроса.ТаймаутСоединения;
- КонецЕсли;
-
- ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL);
-
- ПараметрыФункции = Новый Массив;
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(СтруктураURL.Сервер));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL)));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
- ПараметрыФункции.Добавить(?(ИспользуетсяПрокси, ИмяПараметраПрокси, ""));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут));
- ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, ""));
-
- Конструктор.ДобавитьСтроку("%1 = Новый HTTPСоединение(%2);",
- ИмяПараметраСоединение,
- Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
-
-КонецПроцедуры
-
-Процедура ВывестиFTPСоединение(СтруктураURL)
-
- Если ЗначениеЗаполнено(ОписаниеЗапроса.FTPАдресОбратногоСоединения)
- И Не ОписаниеЗапроса.FTPАдресОбратногоСоединения = "-" Тогда
- ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка("Адрес из опции -P, --ftp-port было проигнорировано"));
- КонецЕсли;
-
- Таймаут = 0;
- Если ЗначениеЗаполнено(ОписаниеЗапроса.Таймаут) И ЗначениеЗаполнено(ОписаниеЗапроса.ТаймаутСоединения) Тогда
- Таймаут = ОписаниеЗапроса.Таймаут + ОписаниеЗапроса.ТаймаутСоединения;
- КонецЕсли;
-
- ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL);
-
- ПараметрыФункции = Новый Массив;
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(СтруктураURL.Сервер));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL)));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
- ПараметрыФункции.Добавить(?(ИспользуетсяПрокси, ИмяПараметраПрокси, ""));
- ПараметрыФункции.Добавить(?(ОписаниеЗапроса.FTPПассивныйРежимСоединения, Истина, ""));
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут));
- ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, ""));
-
- Конструктор.ДобавитьСтроку("%1 = Новый FTPСоединение(%2);",
- ИмяПараметраСоединение,
- Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
-
-КонецПроцедуры
-
-Процедура ВывестиЗаголовки()
-
- Если ОписаниеЗапроса.Заголовки.Количество() = 0 Тогда
- Возврат;
- КонецЕсли;
-
- Конструктор.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки);
-
- Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл
- ПараметрыФункции = Новый Массив();
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ));
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение));
-
- Конструктор.ДобавитьСтроку("%1.Вставить(%2);",
- ИмяПараметраЗаголовки,
- Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
- КонецЦикла;
-
-КонецПроцедуры
-
-Процедура ВывестиHTTPЗапрос(СтруктураURL)
-
- ПараметрыФункции = Новый Массив;
-
- АдресРесурсаКод = ПолучитьКодСборкиАдресаРесурса(СтруктураURL);
- Если СтрЧислоСтрок(АдресРесурсаКод) > 1 Тогда
- Конструктор
- .ДобавитьПустуюСтроку()
- .ДобавитьСтроку("АдресРесурса = %1;", АдресРесурсаКод);
- ПараметрыФункции.Добавить("АдресРесурса");
- Иначе
- ПараметрыФункции.Добавить(АдресРесурсаКод);
- КонецЕсли;
-
- Если ОписаниеЗапроса.Заголовки.Количество() Тогда
- ПараметрыФункции.Добавить(ИмяПараметраЗаголовки);
- КонецЕсли;
-
- Конструктор.ДобавитьСтроку("%1 = Новый HTTPЗапрос(%2);",
- ИмяПараметраHTTPЗапрос,
- Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
-
-КонецПроцедуры
+Процедура ДобавитьЗапросы()
-Функция ПолучитьКодСборкиАдресаРесурса(СтруктураURL)
+ МаксимальнаяДлинаАдресаВКомментарии = 100;
- Кавычка = """";
- РазделительПараметровЗапроса = "&";
- КонкатенацияСПереносомСтрокиИАмперсандом = "
- | + ""&"" + ";
- КонкатенацияСПереносомСтроки = "
- | + ";
+ КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество();
+ НомерЗапроса = 0;
- КавычкаЗакрыта = Ложь;
- Код = Кавычка + СтруктураURL.Путь;
- СтрокаЗапроса = СобратьИсходнуюСтрокуЗапроса(СтруктураURL);
+ Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
+
+ НомерЗапроса = НомерЗапроса + 1;
+ СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
+ ВызванМетодПоТекущемуURL = Ложь;
- Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл
- Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
- СтрокаЗапроса = СтрокаЗапроса
- + ?(ЗначениеЗаполнено(СтрокаЗапроса), РазделительПараметровЗапроса, "")
- + ПередаваемыйТекст.Значение;
- КонецЕсли;
- КонецЦикла;
+ Конструктор.ДобавитьПустуюСтроку();
- КодПрочитанныхФайлов = "";
- Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
- Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
- КодПрочитанныхФайлов = КодПрочитанныхФайлов
- + ?(КодПрочитанныхФайлов = "", "", КонкатенацияСПереносомСтрокиИАмперсандом)
- + ПрочитанныйФайл.ИмяПеременной;
+ Если КоличествоURL > 1 Тогда
+ Конструктор.ДобавитьКомментарий("Запрос %1. %2",
+ НомерЗапроса,
+ Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии));
КонецЕсли;
- КонецЦикла;
-
- Если ЗначениеЗаполнено(СтрокаЗапроса)
- Или ЗначениеЗаполнено(КодПрочитанныхФайлов) Тогда
- Код = Код + "?";
- КонецЕсли;
-
- Код = Код + СтрокаЗапроса;
- Если ЗначениеЗаполнено(КодПрочитанныхФайлов) Тогда
- Код = Код + Кавычка
- + ?(ЗначениеЗаполнено(СтрокаЗапроса),
- КонкатенацияСПереносомСтрокиИАмперсандом,
- КонкатенацияСПереносомСтроки)
- + КодПрочитанныхФайлов;
- КавычкаЗакрыта = Истина;
- КонецЕсли;
+ Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда
- Если ЗначениеЗаполнено(СтруктураURL.Фрагмент) Тогда
- Фрагмент = "#" + СтруктураURL.Фрагмент;
- Если КавычкаЗакрыта Тогда
- Код = Код + "
- | + " + Конструктор.ПараметрВСтроку(Фрагмент);
- Иначе
- Код = Код + Фрагмент;
- КонецЕсли;
- КонецЕсли;
+ ДобавитьHTTPСоединение(СтруктураURL);
+ ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса);
- Если Не КавычкаЗакрыта Тогда
- Код = Код + Кавычка;
- КонецЕсли;
+ Если Не ВызванМетодПоТекущемуURL Тогда
+ ДобавитьHTTPЗапрос(СтруктураURL);
+ ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса);
+ ДобавитьВызовHTTPМетода(ОписаниеРесурса);
+ КонецЕсли;
- Возврат Код;
+ ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда
-КонецФункции
+ ДобавитьFTPСоединение(СтруктураURL);
+ ДобавитьВызовFTPМетода(ОписаниеРесурса, СтруктураURL);
-Процедура ДобавитьЧтениеФайлов()
-
- ТребуетсяЧтениеФайловТелаЗапроса = Не МетодУстановкиТелаЗапроса = "ИзФайла";
+ Иначе
- ФайлыДляЧтения = Новый Массив();
- Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
+ ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема);
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
- Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
- Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
- Продолжить;
КонецЕсли;
- Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса
- И Не ТребуетсяЧтениеФайловТелаЗапроса Тогда
- Продолжить;
+ Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
+ Конструктор.Очистить();
+ Возврат;
КонецЕсли;
- ФайлыДляЧтения.Добавить(ПередаваемыйФайл);
-
КонецЦикла;
- Код = УниверсальныеБлокиКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
-
- Если Не ПустаяСтрока(Код) Тогда
- Конструктор
- .ДобавитьПустуюСтроку()
- .ДобавитьСтроку(Код);
- КонецЕсли;
-
КонецПроцедуры
-Процедура ДобавитьДанныеЗапроса()
-
- ТелоЗапросаСтрока = "";
- ТелоЗапроса = УниверсальныеБлокиКода.СборкаТелаЗапроса(
- ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
- ПрочитанныеФайлы);
+Процедура ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса)
- Если ЗначениеЗаполнено(ТелоЗапроса) Тогда
- Если СтрЧислоСтрок(ТелоЗапроса) = 1 Тогда
- ТелоЗапросаСтрока = ТелоЗапроса;
- Иначе
- Конструктор
- .ДобавитьПустуюСтроку()
- .ДобавитьСтроку("%1 = %2;", ИмяПараметраТелоЗапросаСтрока, ТелоЗапроса);
- КонецЕсли;
+ Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
+ Возврат;
КонецЕсли;
-КонецПроцедуры
-
-Процедура ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса)
-
ДлинаИмениФайлаВКомментарии = 100;
ВсеФайлы = Новый Массив();
@@ -482,7 +380,7 @@
НомерФайла = НомерФайла + 1;
Если КоличествоФайлов > 1 Тогда
- ИмяФайла = Лев(ПередаваемыйФайл.ИмяФайла, ДлинаИмениФайлаВКомментарии);
+ ИмяФайла = Лев(ПередаваемыйФайл.ПолноеИмяФайла, ДлинаИмениФайлаВКомментарии);
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьКомментарий("Передача файла %1. %2", НомерФайла, ИмяФайла);
@@ -490,21 +388,92 @@
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
- СтруктураURL.Путь = ДобавитьИмяФайлаКURL(ПередаваемыйФайл, СтруктураURL.Путь);
+ СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
КонецЕсли;
- ВывестиHTTPЗапрос(СтруктураURL);
+ ДобавитьHTTPЗапрос(СтруктураURL);
Конструктор.ДобавитьСтроку("%1.УстановитьИмяФайлаТела(%2);",
ИмяПараметраHTTPЗапрос,
- Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла));
+ Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
- ВывестиВызовHTTPМетода(ОписаниеРесурса);
+ ДобавитьВызовHTTPМетода(ОписаниеРесурса);
КонецЦикла;
КонецПроцедуры
+Процедура ДобавитьHTTPСоединение(СтруктураURL)
+
+ Таймаут = 0;
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.Таймаут) И ЗначениеЗаполнено(ОписаниеЗапроса.ТаймаутСоединения) Тогда
+ Таймаут = ОписаниеЗапроса.Таймаут + ОписаниеЗапроса.ТаймаутСоединения;
+ КонецЕсли;
+
+ ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL);
+
+ ПараметрыФункции = Новый Массив;
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(СтруктураURL.Сервер));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL)));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
+ ПараметрыФункции.Добавить(?(ОписаниеЗапроса.ИспользуетсяПрокси(), ИмяПараметраПрокси, ""));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут));
+ ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, ""));
+
+ Конструктор.ДобавитьСтроку("%1 = Новый HTTPСоединение(%2);",
+ ИмяПараметраСоединение,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+
+КонецПроцедуры
+
+Процедура ДобавитьHTTPЗапрос(СтруктураURL)
+
+ ПараметрыФункции = Новый Массив;
+
+ АдресРесурсаКод = КоллекцияПрограммногоКода.СборкаАдресаРесурса(СтруктураURL,
+ ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
+ ПрочитанныеФайлы);
+
+ Если ПустаяСтрока(АдресРесурсаКод) Тогда
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку("/"));
+ ИначеЕсли СтрЧислоСтрок(АдресРесурсаКод) > 1 Тогда
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("АдресРесурса = %1;", АдресРесурсаКод);
+ ПараметрыФункции.Добавить("АдресРесурса");
+ Иначе
+ ПараметрыФункции.Добавить(АдресРесурсаКод);
+ КонецЕсли;
+
+ Если ОписаниеЗапроса.Заголовки.Количество() Тогда
+ ПараметрыФункции.Добавить(ИмяПараметраЗаголовки);
+ КонецЕсли;
+
+ Конструктор.ДобавитьСтроку("%1 = Новый HTTPЗапрос(%2);",
+ ИмяПараметраHTTPЗапрос,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+
+КонецПроцедуры
+
+Процедура ДобавитьВызовHTTPМетода(ОписаниеРесурса)
+
+ ПараметрыФункции = Новый Массив;
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеРесурса.Метод));
+ ПараметрыФункции.Добавить(ИмяПараметраHTTPЗапрос);
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеРесурса.ИмяВыходногоФайла));
+
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("%1 = %2.ВызватьHTTPМетод(%3);",
+ ИмяПараметраHTTPОтвет,
+ ИмяПараметраСоединение,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+
+ ВызванМетодПоТекущемуURL = Истина;
+
+КонецПроцедуры
+
Процедура ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса)
ДобавитьУстановкуТелаЗапросаТекстовымиДанными();
@@ -546,7 +515,7 @@
Конструктор.ДобавитьСтроку("%1%2.УстановитьИмяФайлаТела(%3);",
?(ЭтоПервыйФайл, "", "// "),
ИмяПараметраHTTPЗапрос,
- Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла));
+ Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
ЭтоПервыйФайл = Ложь;
@@ -554,25 +523,37 @@
КонецПроцедуры
-Процедура ВывестиВызовHTTPМетода(ОписаниеРесурса)
+Процедура ДобавитьFTPСоединение(СтруктураURL)
- ПараметрыФункции = Новый Массив;
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеРесурса.Метод));
- ПараметрыФункции.Добавить(ИмяПараметраHTTPЗапрос);
- ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеРесурса.ИмяВыходногоФайла));
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.FTPАдресОбратногоСоединения)
+ И Не ОписаниеЗапроса.FTPАдресОбратногоСоединения = "-" Тогда
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка("Адрес из опции -P, --ftp-port было проигнорировано"));
+ КонецЕсли;
- Конструктор
- .ДобавитьПустуюСтроку()
- .ДобавитьСтроку("%1 = %2.ВызватьHTTPМетод(%3);",
- ИмяПараметраHTTPОтвет,
- ИмяПараметраСоединение,
- Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+ Таймаут = 0;
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.Таймаут) И ЗначениеЗаполнено(ОписаниеЗапроса.ТаймаутСоединения) Тогда
+ Таймаут = ОписаниеЗапроса.Таймаут + ОписаниеЗапроса.ТаймаутСоединения;
+ КонецЕсли;
- ВызванМетодПоТекущемуURL = Истина;
+ ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL);
+
+ ПараметрыФункции = Новый Массив;
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(СтруктураURL.Сервер));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL)));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
+ ПараметрыФункции.Добавить(?(ОписаниеЗапроса.ИспользуетсяПрокси(), ИмяПараметраПрокси, ""));
+ ПараметрыФункции.Добавить(?(ОписаниеЗапроса.FTPПассивныйРежимСоединения, Истина, ""));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут));
+ ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, ""));
+
+ Конструктор.ДобавитьСтроку("%1 = Новый FTPСоединение(%2);",
+ ИмяПараметраСоединение,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
КонецПроцедуры
-Процедура ВывестиВызовFTPМетода(ОписаниеРесурса, СтруктураURL)
+Процедура ДобавитьВызовFTPМетода(ОписаниеРесурса, СтруктураURL)
Конструктор.ДобавитьПустуюСтроку();
@@ -619,13 +600,14 @@
Продолжить;
КонецЕсли;
- АдресРесурса = СтруктураURL.Путь;
Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
- АдресРесурса = ДобавитьИмяФайлаКURL(ПередаваемыйФайл, АдресРесурса);
+ АдресРесурса = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
+ Иначе
+ АдресРесурса = СтруктураURL.Путь;
КонецЕсли;
ПараметрыФункции = Новый Массив;
- ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла));
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(АдресРесурса));
Конструктор.ДобавитьСтроку("%1.Записать(%2);",
@@ -658,36 +640,12 @@
КонецПроцедуры
-Функция СобратьИсходнуюСтрокуЗапроса(СтруктураURL)
-
- СтрокаЗапроса = "";
-
- Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл
- СтрокаЗапроса = СтрокаЗапроса
- + ?(СтрокаЗапроса = "", "", "&")
- + Параметр.Ключ
- + "="
- + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.URLВКодировкеURL);
- КонецЦикла;
-
- Возврат СтрокаЗапроса;
-
-КонецФункции
-
Функция ИспользуетсяЗащищенноеСоединение(СтруктураURL)
Возврат СтруктураURL.Схема = ПротоколыURL.HTTPS
Или СтруктураURL.Схема = ПротоколыURL.FTPS
Или ЗначениеЗаполнено(ОписаниеЗапроса.ИмяФайлаСертификатаКлиента);
КонецФункции
-Функция ДобавитьИмяФайлаКURL(ПередаваемыйФайл, URL)
- Файл = Новый Файл(ПередаваемыйФайл.ИмяФайла);
- Если Прав(URL, 1) = "/" Тогда
- Возврат URL + Файл.Имя;
- КонецЕсли;
- Возврат URL;
-КонецФункции
-
Функция ПередаваемыйФайлПрочитан(ПередаваемыйФайл)
Если Не ПередаваемыйФайл.ПрочитатьСодержимое Тогда
@@ -721,8 +679,10 @@
Прервать;
КонецЕсли;
КонецЦикла;
-
- Если КоличествоФайлов > 1 Или ЕстьТекстовоеТелоЗапроса Тогда
+
+ Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
+ МетодУстановкиТелаЗапроса = "";
+ ИначеЕсли КоличествоФайлов > 1 Или ЕстьТекстовоеТелоЗапроса Тогда
МетодУстановкиТелаЗапроса = "ИзСтроки";
ИначеЕсли КоличествоФайлов = 1 И Не ЕстьТекстовоеТелоЗапроса Тогда
МетодУстановкиТелаЗапроса = "ИзФайла";
@@ -732,4 +692,23 @@
КонецПроцедуры
+Функция ПолучитьПорт(СтруктураURL)
+
+ Порт = СтруктураURL.Порт;
+ Если Не ЗначениеЗаполнено(Порт) Тогда
+ Если СтруктураURL.Схема = ПротоколыURL.HTTPS Тогда
+ Порт = 443;
+ ИначеЕсли СтруктураURL.Схема = ПротоколыURL.HTTP Тогда
+ Порт = 80;
+ ИначеЕсли СтруктураURL.Схема = ПротоколыURL.FTPS Тогда
+ Порт = 990;
+ ИначеЕсли СтруктураURL.Схема = ПротоколыURL.FTP Тогда
+ Порт = 21;
+ КонецЕсли;
+ КонецЕсли;
+
+ Возврат Порт;
+
+КонецФункции
+
#КонецОбласти
\ No newline at end of file
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP.os"
new file mode 100644
index 0000000..2638294
--- /dev/null
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP.os"
@@ -0,0 +1,963 @@
+#Использовать "../../internal"
+
+Перем Конструктор; // см. КонструкторПрограммногоКода
+Перем ИсходящиеОшибки; // Массив из Структура:
+ // * Текст - Строка - Текст ошибки
+ // * КритичнаяОшибка - Булево - Признак критичиной ошибки
+Перем ОписаниеЗапроса; // см. ОписаниеЗапроса
+
+Перем Состояние; // см. НовоеСостояние
+Перем ПрочитанныеФайлы; // Массив из Структура:
+ // - ПередаваемыйФайл - см. ПередаваемыйФайл
+ // - ИмяПеременной - Строка
+Перем ДанныеЗапросаСборка; // Строка
+Перем URLСборка; // Строка
+
+Перем ИмяПараметраЗаголовки; // Строка
+Перем ИмяПараметраАутентификация; // Строка
+Перем ИмяПараметраПрокси; // Строка
+Перем ИмяПараметраДополнительныеПараметры; // Строка
+Перем ИмяПараметраДанныеЗапроса; // Строка
+Перем ИмяПараметраФайлы; // Строка
+Перем ИмяПараметраПараметрыЗапроса; // Строка
+Перем ИмяПараметраURL; // Строка
+
+#Область ПрограммныйИнтерфейс
+
+// Генерирует программный код для коннектора из переданного описания запроса
+//
+// Параметры:
+// Описание - см. ОписаниеЗапроса - Описание запроса
+// Ошибки - Неопределено - Выходной параметр. Передает обнаруженные при конвертации ошибки:
+// Массив из Структура:
+// * Текст - Строка - Текст ошибки
+// * Критичная - Булево - Признак критичиной ошибки
+//
+// Возвращаемое значение:
+// Строка - Программный код
+Функция Получить(Описание, Ошибки = Неопределено) Экспорт
+
+ Если Ошибки = Неопределено Тогда
+ Ошибки = Новый Массив();
+ КонецЕсли;
+
+ ОписаниеЗапроса = Описание;
+ ИсходящиеОшибки = Ошибки;
+ Конструктор = Новый КонструкторПрограммногоКода();
+ Состояние = НовоеСостояние();
+
+ ПрочитанныеФайлы.Очистить();
+
+ ДобавитьЗаголовки();
+ ДобавитьАутентификацию();
+ ДобавитьПрокси();
+ ДобавитьЧтениеФайлов();
+ ДобавитьДанныеЗапроса();
+ ДобавитьФайлы();
+ ДобавитьПараметрыЗапроса();
+ ДобавитьЗапросы();
+
+ Возврат Конструктор.ПолучитьРезультат();
+
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция ПоддерживаемыеОпции() Экспорт
+
+ ПоддерживаемыеОпции = "url
+ |H
+ |header
+ |X
+ |request
+ |u
+ |user
+ |d
+ |data
+ |data-ascii
+ |data-raw
+ |data-binary
+ |data-urlencode
+ |T
+ |upload-file
+ |G
+ |get
+ |I
+ |head
+ |E
+ |cert
+ |ca-native
+ |cacert
+ |url-query
+ |x
+ |proxy
+ |U
+ |proxy-user
+ |proxy-basic
+ |proxy-ntlm
+ |m
+ |max-time
+ |connect-timeout
+ |json
+ |A
+ |user-agent
+ |oauth2-bearer
+ |L
+ |location
+ |no-location
+ |retry
+ |retry-max-time
+ |F
+ |form
+ |form-string";
+
+ Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь);
+
+КонецФункции
+
+Функция ПоддерживаемыеПротоколы() Экспорт
+ Протоколы = Новый Массив();
+ Протоколы.Добавить(ПротоколыURL.HTTP);
+ Протоколы.Добавить(ПротоколыURL.HTTPS);
+ Возврат Протоколы;
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ПриСозданииОбъекта()
+
+ ИмяПараметраЗаголовки = "Заголовки";
+ ИмяПараметраАутентификация = "Аутентификация";
+ ИмяПараметраПрокси = "Прокси";
+ ИмяПараметраДополнительныеПараметры = "ДополнительныеПараметры";
+ ИмяПараметраДанныеЗапроса = "Данные";
+ ИмяПараметраФайлы = "Файлы";
+ ИмяПараметраПараметрыЗапроса = "ПараметрыЗапроса";
+ ИмяПараметраURL = "URL";
+
+ ПрочитанныеФайлы = Новый Массив();
+
+КонецПроцедуры
+
+Процедура ДобавитьЗаголовки()
+
+ Заголовки = ПередаваемыеЗаголовки();
+ Если Заголовки.Количество() = 0 Тогда
+ Возврат;
+ КонецЕсли;
+
+ Состояние.ЕстьЗаголовки = Истина;
+
+ Конструктор.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки);
+
+ Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл
+
+ Если Не ПередаватьЗаголовок(Заголовок) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ПараметрыФункции = Новый Массив();
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ));
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение));
+
+ Конструктор.ДобавитьСтроку("%1.Вставить(%2);",
+ ИмяПараметраЗаголовки,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьЧтениеФайлов()
+
+ ФайлыДляЧтения = Новый Массив();
+ Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
+
+ Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
+ Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ФайлыДляЧтения.Добавить(ПередаваемыйФайл);
+
+ КонецЦикла;
+
+ Код = КоллекцияПрограммногоКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
+
+ Если Не ПустаяСтрока(Код) Тогда
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку(Код);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьДанныеЗапроса()
+
+ ДанныеЗапросаСборка = "";
+
+ Если Не Состояние.ПереданоТелоЗапроса Тогда
+ Возврат;
+ КонецЕсли;
+
+ НазначениеДанных = НазначенияПередаваемыхДанных.ТелоЗапроса;
+
+ Если ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
+
+ ДобавитьДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраДанныеЗапроса, ДанныеЗапросаСборка);
+
+ ИначеЕсли ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
+
+ ТекстОшибки = "Данные формы невозможно передать в структурированный объект для отправки в КоннекторHTTP";
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка(ТекстОшибки));
+
+ Иначе
+
+ ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметраДанныеЗапроса, ДанныеЗапросаСборка);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьПараметрыЗапроса()
+
+ НазначениеДанных = НазначенияПередаваемыхДанных.СтрокаЗапроса;
+
+ Если Не Состояние.ПереданаСтрокаЗапроса
+ Или Не ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
+ Возврат;
+ КонецЕсли;
+
+ ДобавитьДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраПараметрыЗапроса);
+
+КонецПроцедуры
+
+Процедура ДобавитьДанныеЗапросаЧерезСоответствие(Назначение, ИмяПараметра, РезультатСборка = "")
+
+ КонструкторДанных = Новый КонструкторПрограммногоКода();
+
+ ДобавитьДанныеЗапросаИзТекстовыхДанныхЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра);
+ ДобавитьДанныеЗапросаИзПрочитанныхФайловЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра);
+
+ Если Не КонструкторДанных.Пустой() Тогда
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметра)
+ .ДобавитьСтроку(КонструкторДанных.ПолучитьРезультат());
+
+ РезультатСборка = ИмяПараметра;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьДанныеЗапросаИзТекстовыхДанныхЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра)
+
+ Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл
+
+ Если Не ПередаваемыйТекст.Назначение = Назначение Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(ПередаваемыйТекст.ИмяПоля) Тогда
+ Ключ = ПередаваемыйТекст.ИмяПоля;
+ Значение = ПередаваемыйТекст.Значение;
+ Иначе
+ Ключ = ПередаваемыйТекст.Значение;
+ Значение = "";
+ КонецЕсли;
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Конструктор.ПараметрВСтроку(Ключ));
+ ПараметрыМетода.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Значение));
+
+ КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2);",
+ ИмяПараметра,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода));
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьДанныеЗапросаИзПрочитанныхФайловЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра)
+
+ ЗначенияПолей = Новый Соответствие();
+ Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
+
+ ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
+
+ Если Не ПередаваемыйФайл.Назначение = Назначение
+ Или Не ПередаваемыйФайл.ПрочитатьСодержимое Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ИмяПоля = ПередаваемыйФайл.ИмяПоля;
+ Если ЗначенияПолей[ИмяПоля] = Неопределено Тогда
+
+ ЗначенияПолей.Вставить(ИмяПоля, ПрочитанныйФайл.ИмяПеременной);
+
+ ИначеЕсли ТипЗнч(ЗначенияПолей[ИмяПоля]) = Тип("Массив") Тогда
+
+ ЗначенияПолей[ИмяПоля].Добавить(ПрочитанныйФайл.ИмяПеременной);
+
+ Иначе
+
+ МассивЗначений = Новый Массив();
+ МассивЗначений.Добавить(ЗначенияПолей[ИмяПоля]);
+ МассивЗначений.Добавить(ПрочитанныйФайл.ИмяПеременной);
+
+ ЗначенияПолей.Вставить(ИмяПоля, МассивЗначений);
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Для Каждого Данные Из ЗначенияПолей Цикл
+
+ ИмяПоля = Данные.Ключ;
+
+ Если ТипЗнч(Данные.Значение) = Тип("Массив") Тогда
+
+ МассивПеременныхФайлов = Данные.Значение;
+
+ КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2, Новый Массив());",
+ ИмяПараметра,
+ КонструкторДанных.ПараметрВСтроку(ИмяПоля));
+
+ Для Каждого ИмяПеременнойФайла Из МассивПеременныхФайлов Цикл
+ КонструкторДанных.ДобавитьСтроку("%1[%2].Добавить(%3));",
+ ИмяПараметра,
+ КонструкторДанных.ПараметрВСтроку(ИмяПоля),
+ КонструкторДанных.ПараметрВСтроку(ИмяПеременнойФайла));
+ КонецЦикла;
+
+ Иначе
+
+ ИмяПеременнойФайла = Данные.Значение;
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(КонструкторДанных.ПараметрВСтроку(ИмяПоля));
+ ПараметрыМетода.Добавить(ИмяПеременнойФайла);
+
+ КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2);",
+ ИмяПараметра,
+ КонструкторДанных.ПараметрыФункцииВСтроку(ПараметрыМетода));
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметра, РезультатСборка)
+
+ Сборка = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку(
+ НазначениеДанных,
+ ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
+ ПрочитанныеФайлы);
+
+ Если ЗначениеЗаполнено(Сборка) Тогда
+ Если СтрЧислоСтрок(Сборка) = 1 Тогда
+ РезультатСборка = Сборка;
+ Иначе
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("%1 = %2;", ИмяПараметра, Сборка);
+
+ РезультатСборка = ИмяПараметра;
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьФайлы()
+
+ Если Не ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
+ Возврат;
+ КонецЕсли;
+
+ Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса;
+ КонструкторФайлов = Новый КонструкторПрограммногоКода();
+
+ Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
+
+ Если Не ПередаваемыйФайл.Назначение = Назначение
+ Или ПередаваемыйФайл.ПрочитатьСодержимое Тогда
+ Продолжить;
+ КонецЕсли;
+
+ КонструкторФайлов
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("Файл = Новый Структура();")
+ .ДобавитьСтроку("Файл.Вставить(""Имя"", %1);", КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ИмяПоля));
+
+ Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяФайла) Тогда
+ КонструкторФайлов.ДобавитьСтроку("Файл.Вставить(""ИмяФайла"", %1);",
+ КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла));
+ КонецЕсли;
+
+ КонструкторФайлов.ДобавитьСтроку(
+ "Файл.Вставить(""Данные"", Новый ДвоичныеДанные(%1));",
+ КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
+
+ Если ЗначениеЗаполнено(ПередаваемыйФайл.ТипMIME) Тогда
+ КонструкторФайлов.ДобавитьСтроку(
+ "Файл.Вставить(""Тип"", %1);",
+ КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ТипMIME));
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(ПередаваемыйФайл.Заголовки) Тогда
+ КонструкторФайлов.ДобавитьСтроку("Файл.Вставить(""Заголовки"", Новый Соответствие());");
+
+ Для Каждого Заголовок Из ПередаваемыйФайл.Заголовки Цикл
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(КонструкторФайлов.ПараметрВСтроку(Заголовок.Ключ));
+ ПараметрыМетода.Добавить(КонструкторФайлов.ПараметрВСтроку(Заголовок.Значение));
+
+ КонструкторФайлов.ДобавитьСтроку(
+ "Файл.Заголовки.Вставить(%1);",
+ КонструкторФайлов.ПараметрыФункцииВСтроку(ПараметрыМетода));
+ КонецЦикла;
+ КонецЕсли;
+
+ КонструкторФайлов.ДобавитьСтроку("Файлы.Добавить(Файл);");
+
+ КонецЦикла;
+
+ Если Не КонструкторФайлов.Пустой() Тогда
+ Состояние.ЕстьФайлыMultipart = Истина;
+
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("%1 = Новый Массив();", ИмяПараметраФайлы)
+ .ДобавитьСтроку(КонструкторФайлов.ПолучитьРезультат());
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса)
+
+ ДлинаИмениФайлаВКомментарии = 100;
+
+ ВсеФайлы = Новый Массив();
+ ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеЗапроса.Файлы);
+ ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеРесурса.Файлы);
+
+ ПередаваемыеФайлы = Новый Массив();
+ Для Каждого ПередаваемыйФайл Из ВсеФайлы Цикл
+
+ Если ПередаваемыйФайл.ОтправлятьОтдельно
+ И Не ПередаваемыйФайл.ПрочитатьСодержимое
+ И ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
+ ПередаваемыеФайлы.Добавить(ПередаваемыйФайл);
+ КонецЕсли;
+
+ КонецЦикла;
+
+ КоличествоФайлов = ПередаваемыеФайлы.Количество();
+ НомерФайла = 0;
+ Для Каждого ПередаваемыйФайл Из ПередаваемыеФайлы Цикл
+
+ НомерФайла = НомерФайла + 1;
+
+ Если КоличествоФайлов > 1 Тогда
+ ИмяФайла = Лев(ПередаваемыйФайл.ПолноеИмяФайла, ДлинаИмениФайлаВКомментарии);
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьКомментарий("Передача файла %1. %2", НомерФайла, ИмяФайла);
+ КонецЕсли;
+
+ СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
+ Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
+ СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
+ КонецЕсли;
+
+ Конструктор.ДобавитьСтроку("%1 = Новый ДвоичныеДанные(%2);",
+ ИмяПараметраДанныеЗапроса,
+ Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
+
+ ДобавитьВызовМетода(ОписаниеРесурса, СтруктураURL, ИмяПараметраДанныеЗапроса);
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьАутентификацию()
+
+ ДобавитьАутентификациюBasic();
+ ДобавитьАутентификациюBearer();
+
+КонецПроцедуры
+
+Процедура ДобавитьАутентификациюBasic()
+
+ Если Не Состояние.ТипАутентификации = ТипАутентификацииBasic() Тогда
+ Возврат;
+ КонецЕсли;
+
+ ПараметрыМетода = Новый Массив();
+ ПараметрыМетода.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя));
+ ПараметрыМетода.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
+
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("%1 = Новый Структура(""Пользователь, Пароль"", %2, %3);",
+ ИмяПараметраАутентификация,
+ Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя),
+ Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
+
+КонецПроцедуры
+
+Процедура ДобавитьАутентификациюBearer()
+
+ Если Не Состояние.ТипАутентификации = ТипАутентификацииBearer() Тогда
+ Возврат;
+ КонецЕсли;
+
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку("%1 = Новый Структура(""Токен, Тип"", %2, ""Bearer"");",
+ ИмяПараметраАутентификация,
+ Конструктор.ПараметрВСтроку(ПолучитьТокенBearer()));
+
+КонецПроцедуры
+
+Процедура ДобавитьПрокси()
+
+ Если Не ОписаниеЗапроса.ИспользуетсяПрокси() Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если Не ОбщегоНазначения.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда
+ ТекстОшибки = СтрШаблон("Прокси протокол %1 не поддерживается", ОписаниеЗапроса.ПроксиПротокол);
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
+ Возврат;
+ КонецЕсли;
+
+ Конструктор
+ .ДобавитьПустуюСтроку()
+ .ДобавитьСтроку(КоллекцияПрограммногоКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
+
+КонецПроцедуры
+
+Процедура ДобавитьЗапросы()
+
+ МаксимальнаяДлинаАдресаВКомментарии = 100;
+
+ КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество();
+ НомерЗапроса = 0;
+
+ Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
+
+ НомерЗапроса = НомерЗапроса + 1;
+ СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
+ Состояние.ВызванМетодПоТекущемуURL = Ложь;
+
+ Если Не ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда
+ ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема);
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
+ КонецЕсли;
+
+ Конструктор.ДобавитьПустуюСтроку();
+
+ Если КоличествоURL > 1 Тогда
+ Конструктор.ДобавитьКомментарий("Запрос %1. %2",
+ НомерЗапроса,
+ Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии));
+ КонецЕсли;
+
+ ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса);
+
+ Если Не Состояние.ВызванМетодПоТекущемуURL Тогда
+ ДобавитьВызовМетода(ОписаниеРесурса);
+ КонецЕсли;
+
+ Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
+ Конструктор.Очистить();
+ Возврат;
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьВызовМетода(ОписаниеРесурса, Знач СтруктураURL = Неопределено, Знач ДанныеЗапроса = Неопределено)
+
+ Если СтруктураURL = Неопределено Тогда
+ СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
+ КонецЕсли;
+
+ Если ДанныеЗапроса = Неопределено Тогда
+ ДанныеЗапроса = ДанныеЗапросаСборка;
+ КонецЕсли;
+
+ ДобавитьURL(СтруктураURL);
+ ДобавитьДополнительныеПараметры(ОписаниеРесурса, ДанныеЗапроса);
+
+ ИмяФункции = ИмяФункцииБиблиотекиПоМетоду(ОписаниеРесурса.Метод);
+ ПараметрыФункции = Новый Массив;
+
+ Если ОписаниеРесурса.Метод = "GET" Тогда
+
+ ПараметрПараметрыЗапроса = "";
+ Если Состояние.ПереданаСтрокаЗапроса
+ И ВозможнаПередачаДанныхЧерезСоответствие(НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
+ ПараметрПараметрыЗапроса = ИмяПараметраПараметрыЗапроса;
+ КонецЕсли;
+
+ ПараметрыФункции.Добавить(URLСборка);
+ ПараметрыФункции.Добавить(ПараметрПараметрыЗапроса);
+
+ ИначеЕсли ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(ОписаниеРесурса.Метод) Тогда
+
+ ПараметрыФункции.Добавить(URLСборка);
+ ПараметрыФункции.Добавить(ДанныеЗапроса);
+
+ ИначеЕсли ОписаниеРесурса.Метод = "HEAD" Или ОписаниеРесурса.Метод = "OPTIONS" Тогда
+
+ ПараметрыФункции.Добавить(URLСборка);
+
+ Иначе
+
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеРесурса.Метод));
+ ПараметрыФункции.Добавить(URLСборка);
+
+ ИмяФункции = "ВызватьМетод";
+
+ КонецЕсли;
+
+ Если Состояние.ЕстьДополнительныеПараметры Тогда
+ ПараметрыФункции.Добавить(ИмяПараметраДополнительныеПараметры);
+ КонецЕсли;
+
+ Конструктор.ДобавитьСтроку("Результат = КоннекторHTTP.%1(%2);",
+ ИмяФункции,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+
+ Состояние.ВызванМетодПоТекущемуURL = Истина;
+
+КонецПроцедуры
+
+Процедура ДобавитьURL(СтруктураURL)
+
+ URLСборка = "";
+ НазначениеДанных = НазначенияПередаваемыхДанных.СтрокаЗапроса;
+
+ Если Состояние.ПереданаСтрокаЗапроса
+ И ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
+ URLСборка = КоллекцияПрограммногоКода.СборкаURL(СтруктураURL);
+ Иначе
+ URLСборка = КоллекцияПрограммногоКода.СборкаURL(СтруктураURL,
+ ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
+ ПрочитанныеФайлы);
+ КонецЕсли;
+
+ Если СтрЧислоСтрок(URLСборка) > 1 Тогда
+ Конструктор
+ .ДобавитьСтроку("%1 = %2;", ИмяПараметраURL, URLСборка)
+ .ДобавитьПустуюСтроку();
+
+ URLСборка = ИмяПараметраURL;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьДополнительныеПараметры(ОписаниеРесурса, ДанныеЗапроса)
+
+ Состояние.ЕстьДополнительныеПараметры = Ложь;
+
+ КонструкторДопПараметров = Новый КонструкторПрограммногоКода();
+
+ ДобавитьЗаголовкиВДополнительныеПараметры(КонструкторДопПараметров);
+ ДобавитьАутентификациюВДополнительныеПараметры(КонструкторДопПараметров);
+ ДобавитьПроксиВДополнительныеПараметры(КонструкторДопПараметров);
+ ДобавитьСертификатыВДополнительныеПараметры(КонструкторДопПараметров);
+ ДобавитьТаймаутВДополнительныеПараметры(КонструкторДопПараметров);
+ ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров);
+ ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров);
+ ДобавитьПараметрыЗапросаВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса);
+ ДобавитьДанныеВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса, ДанныеЗапроса);
+ ДобавитьФайлыВДополнительныеПараметры(КонструкторДопПараметров);
+
+ Если Не КонструкторДопПараметров.Пустой() Тогда
+ Состояние.ЕстьДополнительныеПараметры = Истина;
+
+ Конструктор
+ .ДобавитьСтроку("%1 = Новый Структура();", ИмяПараметраДополнительныеПараметры)
+ .ДобавитьСтроку(КонструкторДопПараметров.ПолучитьРезультат())
+ .ДобавитьПустуюСтроку();
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьЗаголовкиВДополнительныеПараметры(КонструкторДопПараметров)
+
+ Если Не Состояние.ЕстьЗаголовки Тогда
+ Возврат;
+ КонецЕсли;
+
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""Заголовки"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ ИмяПараметраЗаголовки);
+
+КонецПроцедуры
+
+Процедура ДобавитьПроксиВДополнительныеПараметры(КонструкторДопПараметров)
+
+ Если Не ОписаниеЗапроса.ИспользуетсяПрокси() Тогда
+ Возврат;
+ КонецЕсли;
+
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""Прокси"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ ИмяПараметраПрокси);
+
+КонецПроцедуры
+
+Процедура ДобавитьАутентификациюВДополнительныеПараметры(КонструкторДопПараметров)
+
+ Если Не ЗначениеЗаполнено(Состояние.ТипАутентификации) Тогда
+ Возврат;
+ КонецЕсли;
+
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""Аутентификация"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ ИмяПараметраАутентификация);
+
+КонецПроцедуры
+
+Процедура ДобавитьТаймаутВДополнительныеПараметры(КонструкторДопПараметров)
+
+ Таймаут = 0;
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.Таймаут) И ЗначениеЗаполнено(ОписаниеЗапроса.ТаймаутСоединения) Тогда
+ Таймаут = ОписаниеЗапроса.Таймаут + ОписаниеЗапроса.ТаймаутСоединения;
+ Иначе
+ Возврат;
+ КонецЕсли;
+
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""Таймаут"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ Конструктор.ПараметрВСтроку(Таймаут));
+
+КонецПроцедуры
+
+Процедура ДобавитьСертификатыВДополнительныеПараметры(КонструкторДопПараметров)
+
+ // Сертификаты УЦ
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.ИмяФайлаСертификатовУЦ) Тогда
+
+ КонструкторДопПараметров.ДобавитьСтроку(
+ "%1.Вставить(""ПроверятьSSL"", Новый СертификатыУдостоверяющихЦентровФайл(%2));",
+ ИмяПараметраДополнительныеПараметры,
+ Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяФайлаСертификатовУЦ));
+
+ КонецЕсли;
+
+ // Сертификат клиента
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.ИмяФайлаСертификатаКлиента) Тогда
+
+ ПараметрыОбъекта = Новый Массив;
+ ПараметрыОбъекта.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяФайлаСертификатаКлиента));
+ ПараметрыОбъекта.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольСертификатаКлиента));
+
+ КонструкторДопПараметров.ДобавитьСтроку(
+ "%1.Вставить(""КлиентскийСертификатSSL"", Новый СертификатКлиентаФайл(%2));",
+ ИмяПараметраДополнительныеПараметры,
+ КонструкторДопПараметров.ПараметрыФункцииВСтроку(ПараметрыОбъекта));
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьПараметрыЗапросаВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса)
+
+ Если Состояние.ПереданаСтрокаЗапроса
+ И ВозможнаПередачаДанныхЧерезСоответствие(НазначенияПередаваемыхДанных.СтрокаЗапроса)
+ И Не ВозможноПередатьПараметрыЗапросаВПараметрыФункцииВызоваМетода(ОписаниеРесурса.Метод) Тогда
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""ПараметрыЗапроса"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ ИмяПараметраПараметрыЗапроса);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьДанныеВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса, ДанныеЗапроса)
+
+ Если ЗначениеЗаполнено(ДанныеЗапроса)
+ И Не ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(ОписаниеРесурса.Метод) Тогда
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""Данные"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ ДанныеЗапроса);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьФайлыВДополнительныеПараметры(КонструкторДопПараметров)
+
+ Если Состояние.ЕстьФайлыMultipart Тогда
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""Файлы"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ ИмяПараметраФайлы);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров)
+
+ Если ОписаниеЗапроса.ЗапретитьПеренаправление Тогда
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""РазрешитьПеренаправление"", Ложь);",
+ ИмяПараметраДополнительныеПараметры);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров)
+
+ Если ОписаниеЗапроса.МаксимальноеКоличествоПовторов > 0 Тогда
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""МаксимальноеКоличествоПовторов"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеКоличествоПовторов));
+ КонецЕсли;
+
+ Если ОписаниеЗапроса.МаксимальноеВремяПовторов > 0 Тогда
+ КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""МаксимальноеВремяПовторов"", %2);",
+ ИмяПараметраДополнительныеПараметры,
+ Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеВремяПовторов));
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(Метод)
+ Возврат Метод = "POST" Или Метод = "PUT" Или Метод = "PATCH" Или Метод = "DELETE";
+КонецФункции
+
+Функция ВозможноПередатьПараметрыЗапросаВПараметрыФункцииВызоваМетода(Метод)
+ Возврат Метод = "GET";
+КонецФункции
+
+Функция ВозможнаПередачаДанныхЧерезСоответствие(Назначение)
+
+ ЭтоДанныеMultipart = ОписаниеЗапроса.ОтправлятьКакMultipartFormData
+ И Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса;
+
+ Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл
+
+ Если Не ПередаваемыйТекст.Назначение = Назначение Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ОтсутствуетИмяПоля = ПередаваемыйТекст.ИмяПоля = "";
+ Если ОтсутствуетИмяПоля Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ РазделительОтличенОтАмперсанда = Не ПередаваемыйТекст.РазделительТелаЗапроса = "&";
+ Если РазделительОтличенОтАмперсанда И Не ЭтоДанныеMultipart Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
+
+ ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
+
+ Если Не ПередаваемыйФайл.Назначение = Назначение Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ОтсутствуетИмяПоля = ПередаваемыйФайл.ИмяПоля = "";
+ Если ОтсутствуетИмяПоля Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ РазделительОтличенОтАмперсанда = Не ПередаваемыйФайл.РазделительТелаЗапроса = "&";
+ Если РазделительОтличенОтАмперсанда И Не ЭтоДанныеMultipart Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат Истина;
+
+КонецФункции
+
+Функция ПередаваемыеЗаголовки()
+ Заголовки = Новый Соответствие();
+ Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл
+ Если ПередаватьЗаголовок(Заголовок) Тогда
+ Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение);
+ КонецЕсли;
+ КонецЦикла;
+ Возврат Заголовки;
+КонецФункции
+
+Функция ПередаватьЗаголовок(Заголовок)
+
+ Имя = НРег(Заголовок.Ключ);
+ Значение = НРег(Заголовок.Значение);
+
+ Если Имя = "content-type" Тогда
+ Если Состояние.ПереданоТелоЗапроса
+ И Значение = "application/x-www-form-urlencoded" Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ ИначеЕсли Имя = "authorization" И СтрНачинаетсяС(Значение, "bearer ") Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ Возврат Истина;
+
+КонецФункции
+
+Функция ПолучитьТокенBearer()
+
+ ЗначениеAuthorization = ОписаниеЗапроса.ЗначениеЗаголовка("Authorization");
+ Подстрока = "bearer ";
+
+ Если СтрНачинаетсяС(НРег(ЗначениеAuthorization), Подстрока) Тогда
+ Возврат СокрЛП(Сред(ЗначениеAuthorization, СтрДлина(Подстрока) + 1));
+ КонецЕсли;
+
+КонецФункции
+
+Функция ПолучитьТипАутентификации()
+
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.ИмяПользователя) Тогда
+ Возврат ТипАутентификацииBasic();
+ ИначеЕсли Не ПолучитьТокенBearer() = Неопределено Тогда
+ Возврат ТипАутентификацииBearer();
+ КонецЕсли;
+
+КонецФункции
+
+Функция ТипАутентификацииBasic()
+ Возврат "basic";
+КонецФункции
+
+Функция ТипАутентификацииBearer()
+ Возврат "bearer";
+КонецФункции
+
+Функция НовоеСостояние()
+ Результат = Новый Структура();
+
+ Результат.Вставить("ПереданоТелоЗапроса", ОписаниеЗапроса.ПереданоТелоЗапроса());
+ Результат.Вставить("ПереданаСтрокаЗапроса", ОписаниеЗапроса.ПереданаСтрокаЗапроса());
+ Результат.Вставить("ЕстьЗаголовки", Ложь);
+ Результат.Вставить("ЕстьФайлыMultipart", Ложь);
+ Результат.Вставить("ЕстьДополнительныеПараметры", Ложь);
+ Результат.Вставить("ВызванМетодПоТекущемуURL", Ложь);
+ Результат.Вставить("ТипАутентификации", ПолучитьТипАутентификации());
+
+ Возврат Результат;
+КонецФункции
+
+Функция ИмяФункцииБиблиотекиПоМетоду(Метод)
+ Возврат Лев(Метод, 1) + НРег(Сред(Метод, 2));
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213CURL.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213CURL.os"
index 35cc8e3..cc1d3d9 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213CURL.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\320\262\320\265\321\200\321\202\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\321\213CURL.os"
@@ -5,7 +5,9 @@
Перем ИсходящиеОшибки; // Массив из Структура:
// * Текст - Строка - Текст ошибки
// * КритичнаяОшибка - Булево - Признак критичиной ошибки
+Перем Генератор; // Объект генератора программного кода
Перем КонсольноеПриложение; // см. КонсольноеПриложение
+Перем ТекущаяКоманда; // см. КомандаПриложения
Перем ОписаниеОпций; // Соответствие
Перем КаталогСохраненияФайлов; // Строка
@@ -85,18 +87,18 @@
// Получает поддерживаемые опции
//
// Возвращаемое значение:
-// Соответствие
+// Массив из Строка
Функция ПоддерживаемыеОпции() Экспорт
ПолучитьКонсольноеПриложение();
- ПоддерживаемыеОпции = Новый Соответствие();
+ ПоддерживаемыеОпции = Новый Массив();
Для Каждого КлючЗначение Из ОписаниеОпций Цикл
ИмяОпции = КлючЗначение.Ключ;
Описание = КлючЗначение.Значение;
Если Описание.Поддерживается Тогда
- ПоддерживаемыеОпции.Вставить(ИмяОпции, Истина);
+ ПоддерживаемыеОпции.Добавить(ИмяОпции);
КонецЕсли;
КонецЦикла;
@@ -116,46 +118,50 @@
Процедура ОбработатьКоманду(Команда) Экспорт
- ПрочитатьКаталогСохраненияФайлов(Команда);
- ПрочитатьАдресаРесурсов(Команда);
- ПрочитатьИменаВыходныхФайлов(Команда);
- ПрочитатьЗаголовки(Команда);
- ПрочитатьПользователя(Команда);
- ПрочитатьДанныеДляОтправки(Команда);
- ПрочитатьМетодЗапроса(Команда);
- ПрочитатьСертификатКлиента(Команда);
- ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС(Команда);
- ПрочитатьИмяФайлаСертификатовУЦ(Команда);
- ПрочитатьПараметрыЗапросаURL(Команда);
- ПрочитатьАдресПрокси(Команда);
- ПрочитатьПользователяПрокси(Команда);
- ПрочитатьТипАутентификацииПрокси(Команда);
- ПрочитатьТаймаут(Команда);
- ПрочитатьТаймаутСоединения(Команда);
- ПрочитатьРежимСоединенияFTP(Команда);
-
- ДополнитьОшибкиНеподдерживаемыеОпции(Команда);
+ ТекущаяКоманда = Команда;
+
+ ПрочитатьКаталогСохраненияФайлов();
+ ПрочитатьАдресаРесурсов();
+ ПрочитатьИменаВыходныхФайлов();
+ ПрочитатьЗаголовки();
+ ПрочитатьПользователя();
+ ПрочитатьДанныеДляОтправки();
+ ПрочитатьМетодЗапроса();
+ ПрочитатьСертификатКлиента();
+ ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС();
+ ПрочитатьИмяФайлаСертификатовУЦ();
+ ПрочитатьПараметрыЗапросаURL();
+ ПрочитатьАдресПрокси();
+ ПрочитатьПользователяПрокси();
+ ПрочитатьТипАутентификацииПрокси();
+ ПрочитатьТаймаут();
+ ПрочитатьТаймаутСоединения();
+ ПрочитатьРежимСоединенияFTP();
+ ПрочитатьИспользованиеПеренаправлений();
+ ПрочитатьПовторныеПопытки();
+
+ ДополнитьОшибкиНеподдерживаемыеОпции();
КонецПроцедуры
-Процедура ПрочитатьМетодЗапроса(Команда)
+Процедура ПрочитатьМетодЗапроса()
- ЕстьДанныеPOST = (ЕстьОпцииГруппыData(Команда) ИЛИ ЕстьОпции(команда, "json"));
+ ЕстьДанныеPOST = ЕстьОпцииГруппыData() Или ЕстьОпцииГруппыForm();
- ЕстьМетодGET = ЗначениеОпции(Команда, "get") = Истина;
- ЕстьМетодPOST = ЗначениеОпции(Команда, "get") = Ложь И ЕстьДанныеPOST;
- ЕстьМетодHEAD = ЗначениеОпции(Команда, "head") = Истина;
+ ЕстьМетодGET = УстановленФлагОпции("get");
+ ЕстьМетодPOST = Не УстановленФлагОпции("get") И ЕстьДанныеPOST;
+ ЕстьМетодHEAD = УстановленФлагОпции("head");
- Файлы = ЗначениеОпции(Команда, "upload-file");
+ Файлы = ЗначениеОпции("upload-file");
КоличествоФайлов = Файлы.Количество();
НомерРесурса = 0;
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
НомерРесурса = НомерРесурса + 1;
- Метод = ВРег(ЗначениеОпции(Команда, "X"));
+ Метод = ПоследнееЗначениеОпции("X");
Если ЗначениеЗаполнено(Метод) Тогда
- ОписаниеРесурса.Метод = Метод;
+ ОписаниеРесурса.Метод = ВРег(Метод);
Продолжить;
КонецЕсли;
@@ -199,7 +205,7 @@
Метод = "STOR"; // Залить файл
ИначеЕсли ЕстьМетодHEAD Тогда
Метод = "HEAD";
- ИначеЕсли ПоследнееЗначениеОпции(Команда, "list-only") = Истина Тогда
+ ИначеЕсли УстановленФлагОпции("list-only") Тогда
Метод = "NLST"; // Список имен файлов в директории
Иначе
Метод = "RETR"; // Скачать файл
@@ -212,11 +218,11 @@
КонецПроцедуры
-Процедура ПрочитатьАдресаРесурсов(Команда)
+Процедура ПрочитатьАдресаРесурсов()
МассивURL = Новый Массив;
- ОбщегоНазначения.ДополнитьМассив(МассивURL, Команда.ЗначениеАргумента("URL"));
- ОбщегоНазначения.ДополнитьМассив(МассивURL, ЗначениеОпции(Команда, "url"));
+ ОбщегоНазначения.ДополнитьМассив(МассивURL, ТекущаяКоманда.ЗначениеАргумента("URL"));
+ ОбщегоНазначения.ДополнитьМассив(МассивURL, ЗначениеОпции("url"));
Для Каждого URL Из МассивURL Цикл
ОписаниеЗапроса.ДобавитьАдресРесурса(URL);
@@ -224,11 +230,11 @@
КонецПроцедуры
-Процедура ПрочитатьИменаВыходныхФайлов(Команда)
+Процедура ПрочитатьИменаВыходныхФайлов()
- ИменаВыходныхФайлов = ЗначениеОпции(Команда, "output");
- ПризнакиИзвлеченияИмениФайлаИзURL = ЗначениеОпции(Команда, "remote-name");
- ИзвлекатьИмяФайлаИзURLДляВсех = ПоследнееЗначениеОпции(Команда, "remote-name-all") = Истина;
+ ИменаВыходныхФайлов = ЗначениеОпции("output");
+ ПризнакиИзвлеченияИмениФайлаИзURL = ЗначениеОпции("remote-name");
+ ИзвлекатьИмяФайлаИзURLДляВсех = УстановленФлагОпции("remote-name-all");
Если ИменаВыходныхФайлов.Количество() И ПризнакиИзвлеченияИмениФайлаИзURL.Количество() Тогда
ТекстОшибки = "Одновременная передача опций -o (--output) и -O (--remote-name) не поддерживается";
@@ -298,49 +304,53 @@
КонецПроцедуры
-Процедура ПрочитатьЗаголовки(Команда)
+Процедура ПрочитатьЗаголовки()
+
+ Заголовки = РазобратьЗаголовки();
+ Для Каждого Заголовок Из Заголовки Цикл
+ ОписаниеЗапроса.ДобавитьЗаголовок(Заголовок.Ключ, Заголовок.Значение);
+ КонецЦикла;
- ОписаниеЗапроса.Заголовки = РазобратьЗаголовки(Команда);
- ДополнитьЗаголовкиJson(Команда);
- ДополнитьЗаголовкиПриНаличииОпцииГруппыData(Команда);
- ДополнитьЗаголовокUserAgent(Команда);
- ДополнитьЗаголовокAuthorizationBearerToken(Команда);
+ ДополнитьЗаголовкиJson();
+ ДополнитьЗаголовкиПриНаличииОпцииГруппыData();
+ ДополнитьЗаголовокUserAgent();
+ ДополнитьЗаголовокAuthorizationBearerToken();
КонецПроцедуры
-Процедура ДополнитьЗаголовкиJson(Команда)
+Процедура ДополнитьЗаголовкиJson()
- Если Не ЕстьОпции(Команда, "json") Тогда
+ Если Не ЕстьОпции("json") Тогда
Возврат;
КонецЕсли;
- Если Не ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "Content-Type")) Тогда
- ОписаниеЗапроса.Заголовки.Вставить("Content-Type", "application/json");
+ Если Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Content-Type")) Тогда
+ ОписаниеЗапроса.ДобавитьЗаголовок("Content-Type", "application/json");
КонецЕсли;
- Если Не ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "Accept")) Тогда
- ОписаниеЗапроса.Заголовки.Вставить("Accept", "application/json");
+ Если Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Accept")) Тогда
+ ОписаниеЗапроса.ДобавитьЗаголовок("Accept", "application/json");
КонецЕсли;
КонецПроцедуры
-Процедура ДополнитьЗаголовкиПриНаличииОпцииГруппыData(Команда)
- Если ЕстьОпцииГруппыData(Команда)
- И ЗначениеОпции(Команда, "get") = Ложь
- И Не ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "Content-Type")) Тогда
- ОписаниеЗапроса.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
+Процедура ДополнитьЗаголовкиПриНаличииОпцииГруппыData()
+ Если ЕстьОпцииГруппыData()
+ И Не УстановленФлагОпции("get")
+ И Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Content-Type")) Тогда
+ ОписаниеЗапроса.ДобавитьЗаголовок("Content-Type", "application/x-www-form-urlencoded");
КонецЕсли;
КонецПроцедуры
-Процедура ДополнитьЗаголовокUserAgent(Команда)
+Процедура ДополнитьЗаголовокUserAgent()
- UserAgent = ПоследнееЗначениеОпции(Команда, "user-agent");
+ UserAgent = ПоследнееЗначениеОпции("user-agent");
Если UserAgent = Неопределено Или СтрДлина(UserAgent) = 0 Тогда
Возврат;
КонецЕсли;
- Если ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "User-Agent")) Тогда
+ Если ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("User-Agent")) Тогда
Возврат;
КонецЕсли;
@@ -348,26 +358,26 @@
UserAgent = "";
КонецЕсли;
- ОписаниеЗапроса.Заголовки.Вставить("User-Agent", UserAgent);
+ ОписаниеЗапроса.ДобавитьЗаголовок("User-Agent", UserAgent);
КонецПроцедуры
-Процедура ДополнитьЗаголовокAuthorizationBearerToken(Команда)
+Процедура ДополнитьЗаголовокAuthorizationBearerToken()
- Токен = ПоследнееЗначениеОпции(Команда, "oauth2-bearer");
+ Токен = ПоследнееЗначениеОпции("oauth2-bearer");
- Если ПустаяСтрока(Токен) Тогда
+ Если Токен = Неопределено Тогда
Возврат;
КонецЕсли;
- ОписаниеЗапроса.Заголовки.Вставить("Authorization", "Bearer " + Токен);
+ ОписаниеЗапроса.ДобавитьЗаголовок("Authorization", "Bearer " + Токен);
КонецПроцедуры
-Функция РазобратьЗаголовки(Команда)
+Функция РазобратьЗаголовки()
Заголовки = Новый Соответствие;
- МассивЗаголовков = ЗначениеОпции(Команда, "H");
+ МассивЗаголовков = ЗначениеОпции("H");
Для Каждого Строка Из МассивЗаголовков Цикл
Имя = "";
Значение = "";
@@ -387,45 +397,49 @@
КонецФункции
-Функция ЗначениеЗаголовка(Заголовки, Имя)
-
- Для Каждого КлючЗначение Из Заголовки Цикл
- Если НРег(КлючЗначение.Ключ) = НРег(Имя) Тогда
- Возврат КлючЗначение.Значение;
- КонецЕсли;
- КонецЦикла;
+Процедура ПрочитатьПользователя()
-КонецФункции
+ ПользовательИПароль = ПоследнееЗначениеОпции("u");
+
+ Если ПользовательИПароль = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
-Процедура ПрочитатьПользователя(Команда)
- ПользовательИПароль = ЗначениеОпции(Команда, "u");
МассивПодстрок = СтрРазделить(ПользовательИПароль, ":");
ОписаниеЗапроса.ИмяПользователя = МассивПодстрок[0];
Если МассивПодстрок.Количество() = 2 Тогда
ОписаниеЗапроса.ПарольПользователя = МассивПодстрок[1];
- КонецЕсли
+ КонецЕсли;
+
КонецПроцедуры
-Процедура ПрочитатьДанныеДляОтправки(Команда)
+Процедура ПрочитатьДанныеДляОтправки()
- ПрочитатьData(Команда);
- ПрочитатьDataRaw(Команда);
- ПрочитатьDataBinary(Команда);
- ПрочитатьDataUrlencode(Команда);
- ПрочитатьUploadFile(Команда);
- ПрочитатьОпициюJson(Команда);
+ ПроверитьДанные();
+
+ ПрочитатьData();
+ ПрочитатьDataRaw();
+ ПрочитатьDataBinary();
+ ПрочитатьDataUrlencode();
+ ПрочитатьUploadFile();
+ ПрочитатьОпициюJson();
+ ПрочитатьForm();
+ ПрочитатьFormString();
КонецПроцедуры
-Процедура ПрочитатьData(Команда)
+Процедура ПрочитатьData()
- МассивДанных = ЗначениеОпции(Команда, "d"); // -d, --data
- Назначение = НазначениеПередаваемыхДанныхPOST(Команда);
+ МассивДанных = ЗначениеОпции("d"); // -d, --data
+ Назначение = НазначениеПередаваемыхДанных();
Для Каждого Данные Из МассивДанных Цикл
+ ПозицияРавенства = СтрНайти(Данные, "=");
+
Если Лев(Данные, 1) = "@" Тогда
+
ИмяФайла = Сред(Данные, 2);
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение);
@@ -433,19 +447,32 @@
ПередаваемыйФайл.УдалятьПереносыСтрок = Истина;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
+
+ ИначеЕсли ПозицияРавенства > 0 Тогда
+
+ ИмяПоля = Сред(Данные, 1, ПозицияРавенства - 1);
+ Значение = Сред(Данные, ПозицияРавенства + 1);
+
+ ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение);
+ ПередаваемыйТекст.ИмяПоля = ИмяПоля;
+
+ ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
+
Иначе
+
ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение);
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
+
КонецЕсли;
КонецЦикла;
КонецПроцедуры
-Процедура ПрочитатьDataRaw(Команда)
+Процедура ПрочитатьDataRaw()
- МассивДанных = ЗначениеОпции(Команда, "data-raw");
- Назначение = НазначениеПередаваемыхДанныхPOST(Команда);
+ МассивДанных = ЗначениеОпции("data-raw");
+ Назначение = НазначениеПередаваемыхДанных();
Для Каждого Данные Из МассивДанных Цикл
ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение);
@@ -454,10 +481,10 @@
КонецПроцедуры
-Процедура ПрочитатьDataBinary(Команда)
+Процедура ПрочитатьDataBinary()
- МассивДанных = ЗначениеОпции(Команда, "data-binary");
- Назначение = НазначениеПередаваемыхДанныхPOST(Команда);
+ МассивДанных = ЗначениеОпции("data-binary");
+ Назначение = НазначениеПередаваемыхДанных();
Для Каждого Данные Из МассивДанных Цикл
Если Лев(Данные, 1) = "@" Тогда
@@ -473,47 +500,62 @@
КонецПроцедуры
-Процедура ПрочитатьDataUrlencode(Команда)
+Процедура ПрочитатьDataUrlencode()
- МассивДанных = ЗначениеОпции(Команда, "data-urlencode");
- Назначение = НазначениеПередаваемыхДанныхPOST(Команда);
+ МассивДанных = ЗначениеОпции("data-urlencode");
+ Назначение = НазначениеПередаваемыхДанных();
Для Каждого Данные Из МассивДанных Цикл
+
ПозицияРавенства = СтрНайти(Данные, "=");
ПозицияСобачки = СтрНайти(Данные, "@");
+
Если ПозицияРавенства > 0 Тогда
- Ключ = Сред(Данные, 1, ПозицияРавенства - 1);
+
+ ИмяПоля = Сред(Данные, 1, ПозицияРавенства - 1);
Значение = Сред(Данные, ПозицияРавенства + 1);
-
- Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL);
- Если ЗначениеЗаполнено(Ключ) Тогда
- Значение = СтрШаблон("%1=%2", Ключ, Значение);
+
+ ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение);
+ ПередаваемыйТекст.КодироватьЗначение = Истина;
+
+ Если Не ПустаяСтрока(ИмяПоля) Тогда
+ ПередаваемыйТекст.ИмяПоля = ИмяПоля;
КонецЕсли;
- ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение);
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
+
ИначеЕсли ПозицияСобачки > 0 Тогда
- Ключ = Сред(Данные, 1, ПозицияСобачки - 1);
+
+ ИмяПоля = Сред(Данные, 1, ПозицияСобачки - 1);
ИмяФайла = СокрЛП(Сред(Данные, ПозицияСобачки + 1));
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение);
- ПередаваемыйФайл.Ключ = Ключ;
+ ПередаваемыйФайл.ИмяПоля = ИмяПоля;
ПередаваемыйФайл.ПрочитатьСодержимое = Истина;
ПередаваемыйФайл.КодироватьСодержимое = Истина;
+
+ Если Не ПустаяСтрока(ИмяПоля) Тогда
+ ПередаваемыйФайл.ИмяПоля = ИмяПоля;
+ КонецЕсли;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
+
Иначе
- Значение = КодироватьСтроку(Данные, СпособКодированияСтроки.URLВКодировкеURL);
- ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение);
+
+ ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение);
+ ПередаваемыйТекст.КодироватьЗначение = Истина;
+
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
+
КонецЕсли;
+
КонецЦикла;
КонецПроцедуры
-Процедура ПрочитатьUploadFile(Команда)
+Процедура ПрочитатьUploadFile()
- МассивДанных = ЗначениеОпции(Команда, "T"); // -T, --upload-file
+ МассивДанных = ЗначениеОпции("T"); // -T, --upload-file
ФигурныеСкобки = "{}";
Индекс = -1;
@@ -537,7 +579,9 @@
ЗначениеБезСкобок = Сред(Значение, 2, СтрДлина(Значение) - 2);
МассивФайлов = СтрРазделить(ЗначениеБезСкобок, ",");
ИначеЕсли СтрНайти(ФигурныеСкобки, ПервыйСимвол) Или СтрНайти(ФигурныеСкобки, ПоследнийСимвол) Тогда
- ТекстОшибки = СтрШаблон("Неправильное использование фигурных скобок в значении '%1' опции -T, --upload-file", Значение);
+ ТекстОшибки = СтрШаблон(
+ "Неправильное использование фигурных скобок в значении '%1' опции -T, --upload-file",
+ Значение);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
МассивФайлов.Добавить(Значение);
Иначе
@@ -555,10 +599,10 @@
КонецПроцедуры
-Процедура ПрочитатьОпициюJson(Команда)
+Процедура ПрочитатьОпициюJson()
- МассивДанных = ЗначениеОпции(Команда, "json");
- Назначение = НазначениеПередаваемыхДанныхPOST(Команда);
+ МассивДанных = ЗначениеОпции("json");
+ Назначение = НазначениеПередаваемыхДанных();
Для Каждого Данные Из МассивДанных Цикл
@@ -580,11 +624,97 @@
КонецПроцедуры
-Процедура ПрочитатьСертификатКлиента(Команда)
+Процедура ПрочитатьForm()
+
+ МассивДанных = ЗначениеОпции("form"); // -f, --Form
+ Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса;
+
+ Если МассивДанных.Количество() > 0 Тогда
+ ОписаниеЗапроса.ОтправлятьКакMultipartFormData = Истина;
+ КонецЕсли;
+
+ Для Каждого Данные Из МассивДанных Цикл
+
+ Парсер = Новый ПарсерЗначенияОпцииForm();
+ ДанныеПоляФормы = Парсер.Распарсить(Данные);
+
+ Если ДанныеПоляФормы.Значение = Неопределено Тогда
+ ТекстОшибки = СтрШаблон("В опции -F (--form) некорректно указано значение: '%1'", Данные);
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
+ Возврат;
+ КонецЕсли;
+
+ ПервыйСимвол = Лев(ДанныеПоляФормы.Значение, 1);
+ ЭтоФайл = ПервыйСимвол = "@" Или ПервыйСимвол = "<";
+
+ Если ЭтоФайл Тогда
+ ПолноеИмяФайла = Сред(ДанныеПоляФормы.Значение, 2);
+
+ ПередаваемыйЭлемент = Новый ПередаваемыйФайл(ПолноеИмяФайла, Назначение);
+ ПередаваемыйЭлемент.ПрочитатьСодержимое = ПервыйСимвол = "<";
+ ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйЭлемент);
+
+ ИмяФайла = ДанныеПоляФормы.Параметры["filename"];
+ Если Не ИмяФайла = Неопределено Тогда
+ ПередаваемыйЭлемент.ИмяФайла = ИмяФайла;
+ КонецЕсли;
+ Иначе
+ ПередаваемыйЭлемент = Новый ПередаваемыйТекст(ДанныеПоляФормы.Значение, Назначение);
+ ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйЭлемент);
+ КонецЕсли;
+
+ ПередаваемыйЭлемент.ИмяПоля = ДанныеПоляФормы.ИмяПоля;
+ ПередаваемыйЭлемент.Заголовки = ДанныеПоляФормы.Параметры["headers"];
+
+ ТипMIME = ДанныеПоляФормы.Параметры["type"];
+ Если Не ТипMIME = Неопределено Тогда
+ ПередаваемыйЭлемент.ТипMIME = ТипMIME;
+ КонецЕсли;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ПрочитатьFormString()
+
+ МассивДанных = ЗначениеОпции("form-string");
+ Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса;
+
+ Если МассивДанных.Количество() > 0 Тогда
+ ОписаниеЗапроса.ОтправлятьКакMultipartFormData = Истина;
+ КонецЕсли;
+
+ Для Каждого Данные Из МассивДанных Цикл
+
+ ПозицияРавенства = СтрНайти(Данные, "=");
+
+ Если ПозицияРавенства = 0 Тогда
+ ТекстОшибки = СтрШаблон("В опции --form-string некорректно указано значение: '%1'", Данные);
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
+ Возврат;
+ КонецЕсли;
+
+ ИмяПоля = Сред(Данные, 1, ПозицияРавенства - 1);
+ Значение = Сред(Данные, ПозицияРавенства + 1);
+
+ Если ПустаяСтрока(ИмяПоля) Тогда
+ ИмяПоля = "null";
+ КонецЕсли;
+
+ ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение);
+ ПередаваемыйТекст.ИмяПоля = ИмяПоля;
+
+ ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ПрочитатьСертификатКлиента()
- СертификатКлиента = ПоследнееЗначениеОпции(Команда, "E");
+ СертификатКлиента = ПоследнееЗначениеОпции("E");
- Если Не ЗначениеЗаполнено(СертификатКлиента) Тогда
+ Если СертификатКлиента = Неопределено Тогда
Возврат;
КонецЕсли;
@@ -598,24 +728,24 @@
КонецПроцедуры
-Процедура ПрочитатьИмяФайлаСертификатовУЦ(Команда)
+Процедура ПрочитатьИмяФайлаСертификатовУЦ()
- МассивЗначений = ЗначениеОпции(Команда, "cacert");
+ МассивЗначений = ЗначениеОпции("cacert");
Если МассивЗначений.Количество() Тогда
ОписаниеЗапроса.ИмяФайлаСертификатовУЦ = МассивЗначений[МассивЗначений.ВГраница()];
КонецЕсли;
КонецПроцедуры
-Процедура ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС(Команда)
+Процедура ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС()
- ОписаниеЗапроса.ИспользоватьСертификатыУЦИзХранилищаОС = ЗначениеОпции(Команда, "ca-native");
+ ОписаниеЗапроса.ИспользоватьСертификатыУЦИзХранилищаОС = УстановленФлагОпции("ca-native");
КонецПроцедуры
-Процедура ПрочитатьПараметрыЗапросаURL(Команда)
+Процедура ПрочитатьПараметрыЗапросаURL()
- МассивДанных = ЗначениеОпции(Команда, "url-query");
+ МассивДанных = ЗначениеОпции("url-query");
Для Каждого Данные Из МассивДанных Цикл
@@ -629,54 +759,56 @@
КодироватьЗначение = Не НачинаетсяСПлюса;
Если ПозицияРавенства > 0 Тогда
- Ключ = Сред(Данные, 1, ПозицияРавенства - 1);
- ПараметрЗапроса = Сред(Данные, ПозицияРавенства + 1);
- Если КодироватьЗначение Тогда
- ПараметрЗапроса = КодироватьСтроку(ПараметрЗапроса, СпособКодированияСтроки.URLВКодировкеURL);
- КонецЕсли;
+ ИмяПоля = Сред(Данные, 1, ПозицияРавенства - 1);
+ Значение = Сред(Данные, ПозицияРавенства + 1);
- Если ЗначениеЗаполнено(Ключ) Тогда
- ПараметрЗапроса = СтрШаблон("%1=%2", Ключ, ПараметрЗапроса);
+ ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, НазначенияПередаваемыхДанных.СтрокаЗапроса);
+ ПередаваемыйТекст.КодироватьЗначение = КодироватьЗначение;
+
+ Если Не ПустаяСтрока(ИмяПоля) Тогда
+ ПередаваемыйТекст.ИмяПоля = ИмяПоля;
КонецЕсли;
- ПередаваемыйТекст = Новый ПередаваемыйТекст(ПараметрЗапроса, НазначенияПередаваемыхДанных.СтрокаЗапроса);
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
+
ИначеЕсли ПозицияСобачки > 0 И Не НачинаетсяСПлюса Тогда
- Ключ = Сред(Данные, 1, ПозицияСобачки - 1);
+
+ ИмяПоля = Сред(Данные, 1, ПозицияСобачки - 1);
ИмяФайла = СокрЛП(Сред(Данные, ПозицияСобачки + 1));
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, НазначенияПередаваемыхДанных.СтрокаЗапроса);
- ПередаваемыйФайл.Ключ = Ключ;
+ ПередаваемыйФайл.ИмяПоля = ИмяПоля;
ПередаваемыйФайл.ПрочитатьСодержимое = Истина;
ПередаваемыйФайл.КодироватьСодержимое = Истина;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
+
Иначе
- ПараметрЗапроса = Данные;
- Если КодироватьЗначение Тогда
- ПараметрЗапроса = КодироватьСтроку(Данные, СпособКодированияСтроки.URLВКодировкеURL);
- КонецЕсли;
- ПередаваемыйТекст = Новый ПередаваемыйТекст(ПараметрЗапроса, НазначенияПередаваемыхДанных.СтрокаЗапроса);
+ ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, НазначенияПередаваемыхДанных.СтрокаЗапроса);
+ ПередаваемыйТекст.КодироватьЗначение = КодироватьЗначение;
+
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
+
КонецЕсли;
КонецЦикла;
КонецПроцедуры
-Процедура ПрочитатьКаталогСохраненияФайлов(Команда)
+Процедура ПрочитатьКаталогСохраненияФайлов()
КаталогСохраненияФайлов = "";
- Каталог = ПоследнееЗначениеОпции(Команда, "output-dir");
+ Каталог = ПоследнееЗначениеОпции("output-dir");
Если Не Каталог = Неопределено Тогда
КаталогСохраненияФайлов = Каталог;
КонецЕсли;
КонецПроцедуры
-Процедура ПрочитатьАдресПрокси(Команда)
+Процедура ПрочитатьАдресПрокси()
+
+ АдресПрокси = ПоследнееЗначениеОпции("proxy");
- АдресПрокси = ПоследнееЗначениеОпции(Команда, "proxy");
- Если Не ЗначениеЗаполнено(АдресПрокси) Тогда
+ Если АдресПрокси = Неопределено Тогда
Возврат;
КонецЕсли;
@@ -696,10 +828,11 @@
КонецПроцедуры
-Процедура ПрочитатьПользователяПрокси(Команда)
+Процедура ПрочитатьПользователяПрокси()
- СтрокаПользователя = ПоследнееЗначениеОпции(Команда, "proxy-user");
- Если Не ЗначениеЗаполнено(СтрокаПользователя) Тогда
+ СтрокаПользователя = ПоследнееЗначениеОпции("proxy-user");
+
+ Если СтрокаПользователя = Неопределено Тогда
Возврат;
КонецЕсли;
@@ -713,9 +846,9 @@
КонецПроцедуры
-Процедура ПрочитатьТипАутентификацииПрокси(Команда)
+Процедура ПрочитатьТипАутентификацииПрокси()
- Если ПоследнееЗначениеОпции(Команда, "proxy-ntlm") = Истина Тогда
+ Если УстановленФлагОпции("proxy-ntlm") Тогда
ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM;
Иначе
ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.Basic;
@@ -723,28 +856,28 @@
КонецПроцедуры
-Процедура ПрочитатьТаймаут(Команда)
+Процедура ПрочитатьТаймаут()
- Таймаут = ПоследнееЗначениеОпции(Команда, "max-time");
+ Таймаут = ПоследнееЗначениеОпции("max-time");
Если Не Таймаут = Неопределено Тогда
ОписаниеЗапроса.Таймаут = Таймаут;
КонецЕсли;
КонецПроцедуры
-Процедура ПрочитатьТаймаутСоединения(Команда)
+Процедура ПрочитатьТаймаутСоединения()
- ТаймаутСоединения = ПоследнееЗначениеОпции(Команда, "connect-timeout");
+ ТаймаутСоединения = ПоследнееЗначениеОпции("connect-timeout");
Если Не ТаймаутСоединения = Неопределено Тогда
ОписаниеЗапроса.ТаймаутСоединения = ТаймаутСоединения;
КонецЕсли;
КонецПроцедуры
-Процедура ПрочитатьРежимСоединенияFTP(Команда)
+Процедура ПрочитатьРежимСоединенияFTP()
- АдресДляОбратногоСоединения = ПоследнееЗначениеОпции(Команда, "ftp-port");
- АдресПрокси = ПоследнееЗначениеОпции(Команда, "proxy");
+ АдресДляОбратногоСоединения = ПоследнееЗначениеОпции("ftp-port");
+ АдресПрокси = ПоследнееЗначениеОпции("proxy");
Если ЗначениеЗаполнено(АдресДляОбратногоСоединения) И Не ЗначениеЗаполнено(АдресПрокси) Тогда
ОписаниеЗапроса.FTPАдресОбратногоСоединения = АдресДляОбратногоСоединения;
@@ -755,8 +888,30 @@
КонецПроцедуры
-Функция НазначениеПередаваемыхДанныхPOST(Команда)
- Если ЗначениеОпции(Команда, "get") = Истина Тогда
+Процедура ПрочитатьИспользованиеПеренаправлений()
+
+ ОписаниеЗапроса.РазрешитьПеренаправление = УстановленФлагОпции("location");
+ ОписаниеЗапроса.ЗапретитьПеренаправление = УстановленФлагОпции("no-location");
+
+КонецПроцедуры
+
+Процедура ПрочитатьПовторныеПопытки()
+
+ МаксимальноеКоличествоПовторов = ПоследнееЗначениеОпции("retry");
+ МаксимальноеВремяПовторов = ПоследнееЗначениеОпции("retry-max-time");
+
+ Если Не МаксимальноеКоличествоПовторов = Неопределено Тогда
+ ОписаниеЗапроса.МаксимальноеКоличествоПовторов = МаксимальноеКоличествоПовторов;
+ КонецЕсли;
+
+ Если Не МаксимальноеВремяПовторов = Неопределено Тогда
+ ОписаниеЗапроса.МаксимальноеВремяПовторов = МаксимальноеВремяПовторов;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция НазначениеПередаваемыхДанных()
+ Если УстановленФлагОпции("get") Тогда
Возврат НазначенияПередаваемыхДанных.СтрокаЗапроса;
Иначе
Возврат НазначенияПередаваемыхДанных.ТелоЗапроса;
@@ -776,286 +931,398 @@
КонсольноеПриложение.Аргумент("URL", "", "Адрес ресурса").ТМассивСтрок();
// Поддерживаемые
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("url", "", "URL").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("H header", "", "HTTP заголовок").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("X request", "", "Метод запроса").ТСтрока();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("u user", "", "Пользователь и пароль").ТСтрока();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("d data data-ascii", "", "Передаваемые данные по HTTP POST").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("data-raw", "", "Передаваемые данные по HTTP POST без интерпретации символа @").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("data-binary", "", "Передаваемые двоичные данные по HTTP POST").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("data-urlencode", "", "Передаваемые данные по HTTP POST с URL кодированием").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("T upload-file", "", "Загружаемый файл").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("G get", Ложь, "Данные из опций -d и--data-... добавляются в URL как строка запроса").Флаговый();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("I head", Ложь, "Получение заголовков").Флаговый();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("E cert", "", "Сертификат клиента").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("ca-native", Ложь, "Использование сертификатов УЦ из системного хранилища сертификатов операционной системы").Флаговый();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("cacert", "", "Файл сертификатов удостоверяющих центров").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("url-query", "", "Параметры строки запроса URL").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("o output", "", "Имя выходного файла").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("output-dir", "", "Каталог сохранения файлов").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("O remote-name", "", "Извлечение имени выходного файла из URL").ТМассивБулево();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("remote-name-all", "", "Извлечение имени выходного файла для всех URL").ТМассивБулево();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("x proxy", "", "Прокси").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("U proxy-user", "", "Пользователь прокси").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("proxy-basic", "", "Использовать HTTP Basic-аутентификация прокси").ТМассивБулево();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("proxy-ntlm", "", "Использовать NTLM-аутентификацию").ТМассивБулево();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("m max-time", 0, "Максимальное время ожидания на выполнение запроса").ТМассивЧисел();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("connect-timeout", 0, "Максимальное время ожидания на попытку соединения к хосту").ТМассивЧисел();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("json", "", "Данные JSON").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("A user-agent", "", "HTTP заголовок запроса User-Agent").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("oauth2-bearer", "", "Bearer-token").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("ftp-pasv", , "Использование пассивного режима ftp-соединения").ТМассивБулево();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("P ftp-port", "", "Использование активного режима ftp-соединения").ТМассивСтрок();
- ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("l list-only").ТМассивБулево();
+ ДобавитьПоддерживаемуюОпцию(
+ "url",
+ "URL").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "H header",
+ "HTTP заголовок").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "X request",
+ "Метод запроса").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "u user",
+ "Пользователь и пароль").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "d data data-ascii",
+ "Передаваемые данные по HTTP POST").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "data-raw",
+ "Передаваемые данные по HTTP POST без интерпретации символа @").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "data-binary",
+ "Передаваемые двоичные данные по HTTP POST").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "data-urlencode",
+ "Передаваемые данные по HTTP POST с URL кодированием").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "T upload-file",
+ "Загружаемый файл").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "G get",
+ "Данные из опций -d и --data-... добавляются в URL как строка запроса").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "I head",
+ "Получение заголовков").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "E cert",
+ "Сертификат клиента").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "ca-native",
+ "Использование сертификатов УЦ из системного хранилища сертификатов операционной системы")
+ .ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "cacert",
+ "Файл сертификатов удостоверяющих центров").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "url-query",
+ "Параметры строки запроса URL").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "o output",
+ "Имя выходного файла").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "output-dir",
+ "Каталог сохранения файлов").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "O remote-name",
+ "Извлечение имени выходного файла из URL").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "remote-name-all",
+ "Извлечение имени выходного файла для всех URL").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "x proxy",
+ "Прокси").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "U proxy-user",
+ "Пользователь прокси").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "proxy-basic",
+ "Использовать HTTP Basic-аутентификация прокси").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "proxy-ntlm",
+ "Использовать NTLM-аутентификацию").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "m max-time",
+ "Максимальное время ожидания на выполнение запроса").ТМассивЧисел();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "connect-timeout",
+ "Максимальное время ожидания на попытку соединения к хосту").ТМассивЧисел();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "json",
+ "Данные JSON").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "A user-agent",
+ "HTTP заголовок запроса User-Agent").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "oauth2-bearer",
+ "Bearer-token").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "ftp-pasv",
+ "Использование пассивного режима ftp-соединения").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "P ftp-port",
+ "Использование активного режима ftp-соединения").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "l list-only",
+ "Получение списка имен файлов в директории FTP").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "L location",
+ "Разрешает перенаправления").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "no-location",
+ "Запрещает перенаправления").ТМассивБулево();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "retry",
+ "Количество повторных попыток").ТМассивЧисел();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "retry-max-time",
+ "Максимальное время повторов").ТМассивЧисел();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "F form",
+ "Передаваемые данные по HTTP POST (multipart/form-data)").ТМассивСтрок();
+
+ ДобавитьПоддерживаемуюОпцию(
+ "form-string",
+ "Передаваемые данные по HTTP POST без интерпретации спецтальных сиволов (multipart/form-data)").ТМассивСтрок();
// Неподдерживаемые
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("abstract-unix-socket").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("alt-svc").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("anyauth").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("a append").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("aws-sigv4").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("basic").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("capath").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("cert-status").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("cert-type").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ciphers").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("compressed").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("compressed-ssh").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("K config").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("connect-to").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("C continue-at").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("b cookie").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("c cookie-jar").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("create-dirs").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("create-file-mode").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("crlf").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("crlfile").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("curves").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("delegation").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("digest").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("q disable").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("disable-eprt").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("disable-epsv").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("disallow-username-in-url").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("dns-interface").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("dns-ipv4-addr").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("dns-ipv6-addr").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("dns-servers").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("doh-cert-status").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("doh-insecure").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("doh-url").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("dump-ca-embed").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("D dump-header").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ech").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("egd-file").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("engine").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("etag-compare").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("etag-save").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("expect100-timeout").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("f fail").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("fail-early").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("fail-with-body").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("false-start").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("F form").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("form-escape").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("form-string").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-account").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-alternative-to-user").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-create-dirs").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-method").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-pret").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-skip-pasv-ip").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-ssl-ccc").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-ssl-ccc-mode").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-ssl-control").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("g globoff").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("happy-eyeballs-timeout-ms").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("haproxy-clientip").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("haproxy-protocol").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("h help").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("hostpubmd5").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("hostpubsha256").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("hsts").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("http0.9").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("0 http1.0").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("http1.1").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("http2").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("http2-prior-knowledge").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("http3").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("http3-only").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ignore-content-length").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("k insecure").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("interface").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ip-tos").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ipfs-gateway").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("4 ipv4").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("6 ipv6").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("j junk-session-cookies").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("keepalive-cnt").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("keepalive-time").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("key").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("key-type").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("krb").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("libcurl").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("limit-rate").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("local-port").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("L location").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("location-trusted").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("login-options").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("mail-auth").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("mail-from").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("mail-rcpt").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("mail-rcpt-allowfails").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("M manual").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("max-filesize").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("max-redirs").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("metalink").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("mptcp").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("negotiate").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("n netrc").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("netrc-file").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("netrc-optional").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("no-alpn").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("N no-buffer").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("no-clobber").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("no-keepalive").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("no-npn").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("no-progress-meter").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("no-sessionid").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("noproxy").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ntlm").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ntlm-wb").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("Z parallel").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("parallel-immediate").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("parallel-max").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("pass").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("path-as-is").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("pinnedpubkey").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("post301").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("post302").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("post303").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("preproxy").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proto").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proto-default").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proto-redir").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-anyauth").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-ca-native").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-cacert").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-capath").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-cert").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-cert-type").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-ciphers").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-crlfile").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-digest").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-header").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-http2").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-insecure").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-key").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-key-type").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-negotiate").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-pass").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-pinnedpubkey").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-service-name").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-ssl-allow-beast").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-ssl-auto-client-cert").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-tls13-ciphers").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-tlsauthtype").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-tlspassword").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-tlsuser").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy-tlsv1").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("proxy1.0").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("p proxytunnel").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("pubkey").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("Q quote").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("random-file").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("r range").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("rate").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("raw").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("e referer").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("J remote-header-name").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("R remote-time").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("remove-on-error").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("request-target").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("resolve").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-all-errors").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-connrefused").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-delay").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-max-time").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("sasl-authzid").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("sasl-ir").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("service-name").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("S show-error").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("i show-headers").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("s silent").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("skip-existing").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks4").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks4a").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks5").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks5-basic").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks5-gssapi").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks5-gssapi-nec").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks5-gssapi-service").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("socks5-hostname").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("Y speed-limit").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("y speed-time").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ssl").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ssl-allow-beast").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ssl-auto-client-cert").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ssl-no-revoke").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ssl-reqd").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ssl-revoke-best-effort").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("2 sslv2").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("3 sslv3").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("stderr").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("styled-output").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("suppress-connect-headers").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tcp-fastopen").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tcp-nodelay").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("t telnet-option").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tftp-blksize").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tftp-no-options").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("z time-cond").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tls-earlydata").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tls-max").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tls13-ciphers").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tlsauthtype").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tlspassword").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tlsuser").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("1 tlsv1").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tlsv1.0").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tlsv1.1").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tlsv1.2").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tlsv1.3").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("tr-encoding").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("trace").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("trace-ascii").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("trace-config").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("trace-ids").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("trace-time").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("unix-socket").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("B use-ascii").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("variable").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("v verbose").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("V version").ТМассивБулево();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("vlan-priority").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("w write-out").ТМассивСтрок();
- ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("xattr").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("abstract-unix-socket").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("alt-svc").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("anyauth").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("a append").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("aws-sigv4").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("basic").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("capath").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("cert-status").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("cert-type").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ciphers").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("compressed").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("compressed-ssh").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("K config").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("connect-to").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("C continue-at").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("b cookie").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("c cookie-jar").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("create-dirs").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("create-file-mode").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("crlf").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("crlfile").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("curves").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("delegation").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("digest").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("q disable").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("disable-eprt").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("disable-epsv").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("disallow-username-in-url").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("dns-interface").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("dns-ipv4-addr").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("dns-ipv6-addr").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("dns-servers").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("doh-cert-status").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("doh-insecure").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("doh-url").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("dump-ca-embed").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("D dump-header").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ech").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("egd-file").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("engine").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("etag-compare").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("etag-save").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("expect100-timeout").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("f fail").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("fail-early").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("fail-with-body").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("false-start").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("form-escape").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ftp-account").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ftp-alternative-to-user").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ftp-create-dirs").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ftp-method").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ftp-pret").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ftp-skip-pasv-ip").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ftp-ssl-ccc").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ftp-ssl-ccc-mode").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ftp-ssl-control").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("g globoff").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("happy-eyeballs-timeout-ms").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("haproxy-clientip").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("haproxy-protocol").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("h help").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("hostpubmd5").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("hostpubsha256").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("hsts").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("http0.9").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("0 http1.0").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("http1.1").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("http2").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("http2-prior-knowledge").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("http3").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("http3-only").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ignore-content-length").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("k insecure").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("interface").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ip-tos").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ipfs-gateway").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("4 ipv4").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("6 ipv6").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("j junk-session-cookies").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("keepalive-cnt").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("keepalive-time").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("key").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("key-type").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("krb").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("libcurl").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("limit-rate").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("local-port").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("location-trusted").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("login-options").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("mail-auth").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("mail-from").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("mail-rcpt").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("mail-rcpt-allowfails").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("M manual").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("max-filesize").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("max-redirs").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("metalink").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("mptcp").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("negotiate").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("n netrc").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("netrc-file").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("netrc-optional").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("no-alpn").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("N no-buffer").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("no-clobber").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("no-keepalive").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("no-npn").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("no-progress-meter").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("no-sessionid").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("noproxy").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ntlm").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ntlm-wb").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("Z parallel").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("parallel-immediate").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("parallel-max").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("pass").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("path-as-is").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("pinnedpubkey").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("post301").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("post302").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("post303").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("preproxy").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proto").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proto-default").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proto-redir").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-anyauth").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-ca-native").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-cacert").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-capath").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-cert").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-cert-type").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-ciphers").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-crlfile").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-digest").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-header").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-http2").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-insecure").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-key").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-key-type").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-negotiate").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-pass").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-pinnedpubkey").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-service-name").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-ssl-allow-beast").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-ssl-auto-client-cert").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy-tls13-ciphers").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-tlsauthtype").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-tlspassword").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-tlsuser").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("proxy-tlsv1").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("proxy1.0").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("p proxytunnel").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("pubkey").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("Q quote").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("random-file").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("r range").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("rate").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("raw").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("e referer").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("J remote-header-name").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("R remote-time").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("remove-on-error").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("request-target").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("resolve").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("retry-all-errors").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("retry-connrefused").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("retry-delay").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("sasl-authzid").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("sasl-ir").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("service-name").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("S show-error").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("i show-headers").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("s silent").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("skip-existing").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("socks4").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("socks4a").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("socks5").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("socks5-basic").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("socks5-gssapi").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("socks5-gssapi-nec").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("socks5-gssapi-service").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("socks5-hostname").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("Y speed-limit").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("y speed-time").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("ssl").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ssl-allow-beast").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ssl-auto-client-cert").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ssl-no-revoke").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ssl-reqd").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("ssl-revoke-best-effort").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("2 sslv2").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("3 sslv3").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("stderr").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("styled-output").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("suppress-connect-headers").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tcp-fastopen").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tcp-nodelay").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("t telnet-option").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("tftp-blksize").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("tftp-no-options").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("z time-cond").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("tls-earlydata").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tls-max").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("tls13-ciphers").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("tlsauthtype").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("tlspassword").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("tlsuser").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("1 tlsv1").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tlsv1.0").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tlsv1.1").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tlsv1.2").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tlsv1.3").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("tr-encoding").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("trace").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("trace-ascii").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("trace-config").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("trace-ids").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("trace-time").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("unix-socket").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("B use-ascii").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("variable").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("v verbose").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("V version").ТМассивБулево();
+ ДобавитьНеподдерживаемуюОпцию("vlan-priority").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("w write-out").ТМассивСтрок();
+ ДобавитьНеподдерживаемуюОпцию("xattr").ТМассивБулево();
Возврат КонсольноеПриложение;
КонецФункции
-Функция ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение(Наименования)
+Функция ДобавитьНеподдерживаемуюОпцию(Наименования)
Возврат ДобавитьОпциюВКонсольноеПриложение(Наименования, Ложь);
КонецФункции
-Функция ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение(Наименования, ЗначениеПоУмолчанию = "", Описание = "")
- Возврат ДобавитьОпциюВКонсольноеПриложение(Наименования, Истина, ЗначениеПоУмолчанию, Описание);
+Функция ДобавитьПоддерживаемуюОпцию(Наименования, Описание = "")
+ Возврат ДобавитьОпциюВКонсольноеПриложение(Наименования, Истина, Описание);
КонецФункции
-Функция ДобавитьОпциюВКонсольноеПриложение(Наименования, Поддерживается, ЗначениеПоУмолчанию = "", Описание = "")
- Опция = КонсольноеПриложение.Опция(Наименования, ЗначениеПоУмолчанию, Описание);
+Функция ДобавитьОпциюВКонсольноеПриложение(Наименования, Поддерживается, Описание = "")
+ Опция = КонсольноеПриложение.Опция(Наименования, , Описание);
Описание = Новый Структура();
Описание.Вставить("Поддерживается", Поддерживается);
@@ -1070,30 +1337,6 @@
Возврат Опция;
КонецФункции
-Функция ЕстьОпции(Команда, Опции)
- Для Каждого Опция Из СтрРазделить(Опции, ",") Цикл
- Если ЗначениеЗаполнено(ЗначениеОпции(Команда, Опция)) Тогда
- Возврат Истина;
- КонецЕсли;
- КонецЦикла;
- Возврат Ложь;
-КонецФункции
-
-Функция ЕстьОпцииГруппыData(Команда)
- Возврат ЕстьОпции(Команда, "d,data,data-raw,data-binary,data-urlencode,data-ascii");
-КонецФункции
-
-Функция ПоследнееЗначениеОпции(Команда, ИмяОпции)
- МассивЗначений = ЗначениеОпции(Команда, ИмяОпции);
- Если ТипЗнч(МассивЗначений) = Тип("Массив") И МассивЗначений.Количество() Тогда
- Возврат МассивЗначений[МассивЗначений.ВГраница()];
- КонецЕсли;
-КонецФункции
-
-Функция ЗначениеОпции(Команда, ИмяОпции)
- Возврат Команда.ЗначениеОпции(ИмяОпции);
-КонецФункции
-
Процедура ОбработатьАргументыКоманды(АргументыКоманды, НомерКоманды, КоличествоКоманд)
ПроверитьЧтоКомандаНачинаетсяСCurl(АргументыКоманды, НомерКоманды, КоличествоКоманд);
@@ -1138,23 +1381,33 @@
КонецПроцедуры
-Процедура ДополнитьОшибкиНеподдерживаемыеОпции(Команда)
+Процедура ДополнитьОшибкиНеподдерживаемыеОпции()
+
+ ПоддерживаемыеОпцииГенератора = Новый Соответствие();
+
+ Для Каждого ИмяОпции Из Генератор.ПоддерживаемыеОпции() Цикл
+ Префикс = ?(СтрДлина(ИмяОпции) = 1, "-", "--");
+ ПоддерживаемыеОпцииГенератора.Вставить(Префикс + ИмяОпции, Истина);
+ КонецЦикла;
ПроверенныеОпции = Новый Соответствие();
Для Каждого КлючЗначение Из ОписаниеОпций Цикл
+
Описание = КлючЗначение.Значение;
- Если Описание.Поддерживается Тогда
+ Наименование = Описание.Наименования[0];
+
+ ПоддерживаетсяГенератором = ПоддерживаемыеОпцииГенератора[Наименование] = Истина;
+ Если Описание.Поддерживается И ПоддерживаетсяГенератором Тогда
Продолжить;
КонецЕсли;
- Наименование = Описание.Наименования[0];
Если ПроверенныеОпции[Наименование] <> Неопределено Тогда
Продолжить;
КонецЕсли;
ПроверенныеОпции.Вставить(Наименование, Истина);
- Значение = Команда.ЗначениеОпции(Наименование);
+ Значение = ЗначениеОпции(Наименование);
Если ЗначениеЗаполнено(Значение) Тогда
ТекстОшибки = СтрШаблон("Опция %1 не поддерживается", СтрСоединить(Описание.Наименования, ", "));
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка(ТекстОшибки));
@@ -1170,9 +1423,15 @@
КонецЕсли;
Если Не (НРег(АргументыКоманды[0]) = "curl") Тогда
+
НомерКомандыТекст = ?(КоличествоКоманд > 1, СтрШаблон("#%1 ", НомерКоманды), "");
- Текст = СтрШаблон("Команда %1должна начинаться с ""curl"", но вместо этого начинается с %2", НомерКомандыТекст, АргументыКоманды[0]);
+
+ Текст = СтрШаблон("Команда %1должна начинаться с ""curl"", но вместо этого начинается с %2",
+ НомерКомандыТекст,
+ АргументыКоманды[0]);
+
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(Текст));
+
КонецЕсли;
КонецПроцедуры
@@ -1205,6 +1464,30 @@
КонецПроцедуры
+Процедура ПроверитьДанные()
+
+ ШаблонОдновременнаяПередача = "Одновременная передача опций %1 и %2 запрещена";
+
+ Если ЕстьОпцииГруппыData() И ЕстьОпцииГруппыForm() Тогда
+ ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-d (--data)", "-F (--form)");
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
+ Возврат;
+ КонецЕсли;
+
+ Если ЕстьОпцииГруппыForm() И УстановленФлагОпции( "head") Тогда
+ ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-I (--head)", "-F (--form)");
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
+ Возврат;
+ КонецЕсли;
+
+ Если ЕстьОпции("upload-file") И ЕстьОпцииГруппыForm() Тогда
+ ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-T (--upload-file)", "-F (--form)");
+ ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
+ Возврат;
+ КонецЕсли;
+
+КонецПроцедуры
+
Процедура ВывестиРазделительКоманд(Результат, НомерКоманды, КоличествоКоманд)
Если КоличествоКоманд = 1 Тогда
@@ -1214,7 +1497,7 @@
Результат = Результат
+ ?(НомерКоманды > 1, Символы.ПС + Символы.ПС, "")
+ СтрШаблон(
- "//////////////////////////////////////////////
+ "//////////////////////////////////////////////
|// Команда #%1.", НомерКоманды);
КонецПроцедуры
@@ -1233,6 +1516,47 @@
КонецПроцедуры
+Функция ЕстьОпции(Опции)
+ Для Каждого Опция Из СтрРазделить(Опции, ",") Цикл
+ Если ЗначениеЗаполнено(ЗначениеОпции(Опция)) Тогда
+ Возврат Истина;
+ КонецЕсли;
+ КонецЦикла;
+ Возврат Ложь;
+КонецФункции
+
+Функция ЕстьОпцииГруппыData()
+ Возврат ЕстьОпции("d,data,data-raw,data-binary,data-urlencode,data-ascii,json");
+КонецФункции
+
+Функция ЕстьОпцииГруппыForm()
+ Возврат ЕстьОпции("F,form,form-string");
+КонецФункции
+
+Функция УстановленФлагОпции(ИмяОпции)
+ Значение = ПоследнееЗначениеОпции(ИмяОпции);
+ Если Не Значение = Неопределено Тогда
+ Возврат Значение;
+ Иначе
+ Возврат Ложь;
+ КонецЕсли;
+КонецФункции
+
+Функция ПоследнееЗначениеОпции(ИмяОпции)
+ Значение = ЗначениеОпции(ИмяОпции);
+ Если ТипЗнч(Значение) = Тип("Массив") Тогда
+ Если Значение.Количество() Тогда
+ Возврат Значение[Значение.ВГраница()];
+ КонецЕсли;
+ Иначе
+ Возврат Значение;
+ КонецЕсли;
+КонецФункции
+
+Функция ЗначениеОпции(ИмяОпции)
+ Возврат ТекущаяКоманда.ЗначениеОпции(ИмяОпции);
+КонецФункции
+
// Используется для отключения вывода справки cli
Процедура Заглушка(Значение = Неопределено) Экспорт
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\271\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\271\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os"
index 672420d..e2bf6fd 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\271\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\275\320\276\320\271\320\232\320\276\320\274\320\260\320\275\320\264\321\213.os"
@@ -153,7 +153,9 @@
Возврат Токен;
КонецЕсли;
- ДополнитьНакопительнуюСтроку(Токен.Значение());
+ Если Не Токен = Неопределено Тогда
+ ДополнитьНакопительнуюСтроку(Токен.Значение());
+ КонецЕсли;
КонецЦикла;
diff --git a/src/interface/view/images/favicons/manifest.json b/src/interface/view/images/favicons/manifest.json
index c8ba56a..ec42d12 100644
--- a/src/interface/view/images/favicons/manifest.json
+++ b/src/interface/view/images/favicons/manifest.json
@@ -4,7 +4,7 @@
"description": "Converter of curl command to 1C code",
"author": "Alexander Osadchy, Dmitry Ivanov, Gleb Bogachev",
"homepage_url": "https://github.com/alei1180/curlone",
- "version": "1.0.0",
+ "version": "1.1.0",
"icons": [
{
"src": "/images/favicons/android-icon-36x36.png",
diff --git a/src/interface/view/index.html b/src/interface/view/index.html
index ad7a840..797f485 100644
--- a/src/interface/view/index.html
+++ b/src/interface/view/index.html
@@ -1,10 +1,11 @@
+
-
+
@@ -14,7 +15,7 @@
-
+
@@ -27,6 +28,8 @@
+
@@ -377,8 +493,27 @@
@@ -387,7 +522,10 @@
@@ -399,4 +537,5 @@
+
\ No newline at end of file
diff --git "a/src/interface/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\275\320\276\320\262\320\275\320\276\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273.os" "b/src/interface/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\275\320\276\320\262\320\275\320\276\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273.os"
index c63db91..88aa95f 100644
--- "a/src/interface/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\275\320\276\320\262\320\275\320\276\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273.os"
+++ "b/src/interface/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\275\320\276\320\262\320\275\320\276\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273.os"
@@ -20,13 +20,15 @@
Данные = Новый Структура("result, errors", "", Новый Массив());
ТекстКоманды = ПараметрыЗапросаИменные.Получить("cmd");
+ Язык = ПараметрыЗапросаИменные.Получить("lang");
+
Если ТекстКоманды <> Неопределено Тогда
Если КонвертерКомандыCURL = Неопределено Тогда
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
КонецЕсли;
Попытка
- Данные.result = КонвертерКомандыCURL.Конвертировать(ТекстКоманды, Новый ГенераторПрограммногоКода1С(), Ошибки);
+ Данные.result = КонвертерКомандыCURL.Конвертировать(ТекстКоманды, ПолучитьГенератор(Язык), Ошибки);
Для Каждого Ошибка Из Ошибки Цикл
Данные.errors.Добавить(НоваяОшибка(Ошибка.Текст, Ошибка.Критичная));
@@ -43,6 +45,20 @@
КонецПроцедуры
+Функция ПолучитьГенератор(Язык)
+ Если Язык = "connector" Тогда
+ Возврат Новый ГенераторПрограммногоКодаКоннекторHTTP();
+ ИначеЕсли Язык = "1c" Тогда
+ Возврат Новый ГенераторПрограммногоКода1С();
+ Иначе
+ Возврат ГенераторПоУмолчанию();
+ КонецЕсли;
+КонецФункции
+
+Функция ГенераторПоУмолчанию()
+ Возврат Новый ГенераторПрограммногоКода1С();
+КонецФункции
+
Функция НоваяОшибка(Текст, Критичная = Ложь)
Возврат Новый Структура("text, critical", Текст, Критичная);
КонецФункции
\ No newline at end of file
diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260.os"
index 785e189..b0d1ea2 100644
--- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260.os"
+++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260.os"
@@ -1,19 +1,25 @@
-Перем Результат;
+Перем Результат; // Массив из Строка
-Процедура ПриСозданииОбъекта()
- Результат = "";
-КонецПроцедуры
+#Область ПрограммныйИнтерфейс
Функция ПолучитьРезультат() Экспорт
- Возврат СокрЛП(Результат);
+ Возврат СокрЛП(СтрСоединить(Результат));
+КонецФункции
+
+Функция Пустой() Экспорт
+ Возврат Результат.Количество() = 0;
+КонецФункции
+
+Функция Очистить() Экспорт
+ Результат.Очистить();
+ Возврат ЭтотОбъект;
КонецФункции
Функция ДобавитьСтроку(Строка,
Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено) Экспорт
- Результат = Результат
- + Символы.ПС
- + СтрШаблон(Строка, Значение1, Значение2, Значение3);
+ Результат.Добавить(Символы.ПС);
+ Результат.Добавить(СтрШаблон(Строка, Значение1, Значение2, Значение3));
Возврат ЭтотОбъект;
@@ -26,9 +32,17 @@
КонецФункции
-Функция ДобавитьПустуюСтроку() Экспорт
- Результат = Результат + Символы.ПС;
+Функция ДобавитьПустуюСтроку(ТолькоПриОтсутствии = Истина) Экспорт
+
+ ИндексПоследнего = Результат.ВГраница();
+
+ Если ИндексПоследнего >= 0 И Не Результат[ИндексПоследнего] = Символы.ПС
+ Или Не ТолькоПриОтсутствии Тогда
+ Результат.Добавить(Символы.ПС);
+ КонецЕсли;
+
Возврат ЭтотОбъект;
+
КонецФункции
Функция ПараметрыФункцииВСтроку(ПараметрыФункции) Экспорт
@@ -90,6 +104,16 @@
Возврат "";
КонецФункции
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ПриСозданииОбъекта()
+ Результат = Новый Массив();
+КонецПроцедуры
+
Функция ЭкранироватьКавычки(Строка)
Возврат СтрЗаменить(Строка, """", """""");
-КонецФункции
\ No newline at end of file
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\227\320\260\320\277\321\200\320\276\321\201\320\260.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\227\320\260\320\277\321\200\320\276\321\201\320\260.os"
index dc65dc4..76dcbbe 100644
--- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\227\320\260\320\277\321\200\320\276\321\201\320\260.os"
+++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\227\320\260\320\277\321\200\320\276\321\201\320\260.os"
@@ -1,8 +1,10 @@
+// BSLLS:ExportVariables-off
+
Перем АдресаРесурсов Экспорт; // Массив из Структура
// - URL - Строка - Адрес ресурса
// - Метод - Строка - Метод
// - ИмяВыходногоФайла - Строка - Имя выходного файла
- // - Файлы - Массив из см. ПередаваемыйФайл - Файлы
+ // - Файлы - Массив из см. ПередаваемыйФайл - Файлы для HTTP PUT или FTP
Перем Заголовки Экспорт; // Соответствие из КлючИЗначение
Перем ИмяПользователя Экспорт; // Строка
Перем ПарольПользователя Экспорт; // Строка
@@ -20,6 +22,11 @@
Перем ТипАутентификацииПрокси Экспорт; // см. ТипыАутентификацииПрокси
Перем FTPПассивныйРежимСоединения Экспорт; // Булево
Перем FTPАдресОбратногоСоединения Экспорт; // Строка
+Перем РазрешитьПеренаправление Экспорт; // Булево
+Перем ЗапретитьПеренаправление Экспорт; // Булево
+Перем МаксимальноеКоличествоПовторов Экспорт; // Число
+Перем МаксимальноеВремяПовторов Экспорт; // Число
+Перем ОтправлятьКакMultipartFormData Экспорт; // Булево
// Максимальное время ожидания на выполнение запроса
Перем Таймаут Экспорт; // Число
@@ -27,6 +34,50 @@
// Максимальное время ожидания на попытку соединения к хосту
Перем ТаймаутСоединения Экспорт; // Число
+#Область ПрограммныйИнтерфейс
+
+Процедура ДобавитьАдресРесурса(URL, ИмяВыходногоФайла = "") Экспорт
+ ОписаниеРесурса = НовоеОписаниеРесурса();
+ ОписаниеРесурса.URL = URL;
+ ОписаниеРесурса.ИмяВыходногоФайла = ИмяВыходногоФайла;
+ АдресаРесурсов.Добавить(ОписаниеРесурса);
+КонецПроцедуры
+
+Процедура ДобавитьЗаголовок(Имя, Значение) Экспорт
+ Заголовки.Вставить(Имя, Значение);
+КонецПроцедуры
+
+Функция ЗначениеЗаголовка(Имя) Экспорт
+
+ Значение = Заголовки[Имя];
+ Если Не Значение = Неопределено Тогда
+ Возврат Значение;
+ КонецЕсли;
+
+ Для Каждого КлючИЗначение Из Заголовки Цикл
+ Если НРег(КлючИЗначение.Ключ) = НРег(Имя) Тогда
+ Возврат КлючИЗначение.Значение;
+ КонецЕсли;
+ КонецЦикла;
+
+КонецФункции
+
+Функция ИспользуетсяПрокси() Экспорт
+ Возврат ЗначениеЗаполнено(ПроксиСервер);
+КонецФункции
+
+Функция ПереданоТелоЗапроса() Экспорт
+ Возврат ЕстьДанныеПоНазначению(НазначенияПередаваемыхДанных.ТелоЗапроса);
+КонецФункции
+
+Функция ПереданаСтрокаЗапроса() Экспорт
+ Возврат ЕстьДанныеПоНазначению(НазначенияПередаваемыхДанных.СтрокаЗапроса);
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
Процедура ПриСозданииОбъекта()
АдресаРесурсов = Новый Массив;
Заголовки = Новый Соответствие();
@@ -48,14 +99,30 @@
ТаймаутСоединения = 0;
FTPПассивныйРежимСоединения = Ложь;
FTPАдресОбратногоСоединения = "";
+ РазрешитьПеренаправление = Ложь;
+ ЗапретитьПеренаправление = Ложь;
+ МаксимальноеКоличествоПовторов = 0;
+ МаксимальноеВремяПовторов = 0;
+ ОтправлятьКакMultipartFormData = Ложь;
КонецПроцедуры
-Процедура ДобавитьАдресРесурса(URL, ИмяВыходногоФайла = "") Экспорт
- ОписаниеРесурса = НовоеОписаниеРесурса();
- ОписаниеРесурса.URL = URL;
- ОписаниеРесурса.ИмяВыходногоФайла = ИмяВыходногоФайла;
- АдресаРесурсов.Добавить(ОписаниеРесурса);
-КонецПроцедуры
+Функция ЕстьДанныеПоНазначению(Назначение) Экспорт
+
+ Для Каждого ПередаваемыйТекст Из ОтправляемыеТекстовыеДанные Цикл
+ Если ПередаваемыйТекст.Назначение = Назначение Тогда
+ Возврат Истина;
+ КонецЕсли;
+ КонецЦикла;
+
+ Для Каждого ПередаваемыйФайл Из Файлы Цикл
+ Если ПередаваемыйФайл.Назначение = Назначение Тогда
+ Возврат Истина;
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Ложь;
+
+КонецФункции
Функция НовоеОписаниеРесурса()
Описание = Новый Структура();
@@ -64,4 +131,6 @@
Описание.Вставить("ИмяВыходногоФайла", "");
Описание.Вставить("Файлы", Новый Массив());
Возврат Описание;
-КонецФункции
\ No newline at end of file
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os"
index 82b56f8..50665b4 100644
--- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os"
+++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os"
@@ -88,11 +88,7 @@
Если Не ЗначениеЗаполнено(Схема) Тогда
Схема = "http";
КонецЕсли;
-
- Если Не ЗначениеЗаполнено(Путь) Тогда
- Путь = "/";
- КонецЕсли;
-
+
КонецПроцедуры
Процедура ЗаполнитьПараметрыЗапроса(Путь)
diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\236\320\277\321\206\320\270\320\270Form.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\236\320\277\321\206\320\270\320\270Form.os"
new file mode 100644
index 0000000..7a7d73b
--- /dev/null
+++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\236\320\277\321\206\320\270\320\270Form.os"
@@ -0,0 +1,165 @@
+#Использовать tokenizer
+
+Перем Спецификация; // Массив
+Перем МассивПараметров; // Массив из Структура:
+ // * Имя - Строка - Имя параметра
+ // * Значение - Строка, Неопределено - значение параметра
+Перем ИмяПараметра; // Строка
+Перем БылРазделитель; // Булево
+Перем ЗначениеПараметра; // Строка, Неопределено
+
+#Область ПрограммныйИнтерфейс
+
+// Парсит значение опции -F (--form)
+//
+// Параметры:
+// Строка - Строка - Значение опции
+//
+// Возвращаемое значение:
+// Структура:
+// * ИмяПоля - Строка - Имя поля
+// * Значение - Строка - Значение поля
+// * Параметры - Соответствие из КлючИЗначение:
+// ** Ключ - Строка - Имя параметра. Например: type, filename, headers
+// ** Значение - Строка, Соответствие - Значение параметра. Тип Соответствие только для параметра headers
+Функция Распарсить(Строка) Экспорт
+
+ МассивПараметров = Новый Массив();
+
+ Токенайзер = Новый Токенайзер(Спецификация);
+ Токенайзер.Инит(Строка);
+
+ ИмяПараметра = "";
+ ЗначениеПараметра = Неопределено;
+ ОткрытаДвойнаяКавычка = Ложь;
+ БылРазделитель = Ложь;
+
+ Пока Токенайзер.ЕстьЕщеТокены() Цикл
+
+ Токен = Токенайзер.СледующийТокен();
+
+ Если Токен = Неопределено Тогда
+ Прервать;
+ КонецЕсли;
+
+ ТипТокена = Токен.ТипТокена();
+
+ Если ТипТокена = "ДвойнаяКавычка" Тогда
+ ОткрытаДвойнаяКавычка = Не ОткрытаДвойнаяКавычка;
+
+ Если Не ОткрытаДвойнаяКавычка Тогда
+ ПроверитьИДобавитьПараметр();
+ КонецЕсли;
+ ИначеЕсли ОткрытаДвойнаяКавычка Или ТипТокена = "Строка" Тогда
+ ДополнитьЗначениемТокена(Токен);
+ ИначеЕсли ТипТокена = "ТочкаСЗапятой" Тогда
+ ПроверитьИДобавитьПараметр();
+ ИначеЕсли ТипТокена = "Равенство" Тогда
+ БылРазделитель = Истина;
+ ЗначениеПараметра = "";
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ПроверитьИДобавитьПараметр();
+
+ Возврат ПодготовитьРезультат();
+
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ПриСозданииОбъекта()
+
+ Спецификация = Новый Массив();
+ Спецификация.Добавить(Новый СпецификацияТокенСимвол("""", "ДвойнаяКавычка"));
+ Спецификация.Добавить(Новый СпецификацияТокенСимвол(";", "ТочкаСЗапятой"));
+ Спецификация.Добавить(Новый СпецификацияТокенСимвол("=", "Равенство"));
+ Спецификация.Добавить(Новый СпецификацияТокенРегулярноеВыражение(Новый РегулярноеВыражение("[^=;""]+"), "Строка"));
+
+КонецПроцедуры
+
+Функция ПодготовитьРезультат()
+
+ Результат = Новый Структура("ИмяПоля, Значение, Параметры", "", "", Новый Соответствие());
+
+ Если МассивПараметров.Количество() = 0 Тогда
+ Возврат Результат;
+ КонецЕсли;
+
+ Результат.ИмяПоля = СокрЛП(МассивПараметров[0].Имя);
+ Результат.Значение = СокрЛП(МассивПараметров[0].Значение);
+ Результат.Параметры.Вставить("headers", Новый Соответствие());
+
+ Если ПустаяСтрока(Результат.ИмяПоля) Тогда
+ Результат.ИмяПоля = "null";
+ КонецЕсли;
+
+ Для Индекс = 1 По МассивПараметров.ВГраница() Цикл
+ Параметр = МассивПараметров[Индекс];
+
+ Имя = НРег(СокрЛП(Параметр.Имя));
+ Значение = СокрЛП(Параметр.Значение);
+
+ Если Имя = "headers" Тогда
+ ДобавитьЗаголовок(Результат.Параметры["headers"], Значение);
+ Иначе
+ Результат.Параметры.Вставить(Имя, Значение);
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+Процедура ДобавитьЗаголовок(Заголовки, СтрокаЗаголовка)
+
+ ПозицияДвоеточия = СтрНайти(СтрокаЗаголовка, ":");
+
+ Если ПозицияДвоеточия Тогда
+ Имя = Сред(СтрокаЗаголовка, 1, ПозицияДвоеточия - 1);
+ Значение = СокрЛП(Сред(СтрокаЗаголовка, ПозицияДвоеточия + 1));
+ Иначе
+ Имя = СтрокаЗаголовка;
+ Значение = "";
+ КонецЕсли;
+
+ Заголовки.Вставить(Имя, Значение);
+
+КонецПроцедуры
+
+Процедура ДополнитьЗначениемТокена(Токен)
+
+ Если БылРазделитель Тогда
+
+ Если ЗначениеПараметра = Неопределено Тогда
+ ЗначениеПараметра = "";
+ КонецЕсли;
+
+ ЗначениеПараметра = ЗначениеПараметра + Токен.Значение();
+
+ Иначе
+
+ ИмяПараметра = ИмяПараметра + Токен.Значение();
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПроверитьИДобавитьПараметр()
+
+ Если Не БылРазделитель Тогда
+ Возврат;
+ КонецЕсли;
+
+ МассивПараметров.Добавить(Новый Структура("Имя, Значение", ИмяПараметра, СокрЛП(ЗначениеПараметра)));
+
+ ИмяПараметра = "";
+ БылРазделитель = Ложь;
+ ЗначениеПараметра = Неопределено;
+
+КонецПроцедуры
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\242\320\265\320\272\321\201\321\202.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\242\320\265\320\272\321\201\321\202.os"
index da7a34c..9d8c63d 100644
--- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\242\320\265\320\272\321\201\321\202.os"
+++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\242\320\265\320\272\321\201\321\202.os"
@@ -1,11 +1,52 @@
+// BSLLS:ExportVariables-off
+
+// Имя поля на форме или в строке запроса
+Перем ИмяПоля Экспорт; // Строка, Неопределено
+
+// Текстовое значение
Перем Значение Экспорт; // Строка
+
+// Назначение текста
Перем Назначение Экспорт; // см. НазначенияПередаваемыхДанных
+
+// Кодировать значение
+Перем КодироватьЗначение Экспорт; // Булево
+
+// Разделитель при формировании тела запроса или строки запроса
Перем РазделительТелаЗапроса Экспорт; // Строка
-Процедура ПриСозданииОбъекта(пЗначение, пНазначение)
+// MIME-тип файла (multipart/form-data)
+Перем ТипMIME Экспорт; // Строка
+
+// HTTP заголовки запроса (multipart/form-data)
+Перем Заголовки Экспорт; // Соответствие
+
+Функция ПолноеЗначение(Разделитель = "=") Экспорт
+
+ Если КодироватьЗначение Тогда
+ НовоеЗначение = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL);
+ Иначе
+ НовоеЗначение = Значение;
+ КонецЕсли;
+
+ Если ИмяПоля <> Неопределено Тогда
+ ПолноеЗначение = СтрШаблон("%1%2%3", ИмяПоля, Разделитель, НовоеЗначение);
+ Иначе
+ ПолноеЗначение = НовоеЗначение;
+ КонецЕсли;
+
+ Возврат ПолноеЗначение;
+
+КонецФункции
+
+Процедура ПриСозданииОбъекта(ТекстовоеЗначение, НазначениеТекста)
- Значение = пЗначение;
- Назначение = пНазначение;
+ ИмяПоля = Неопределено;
+ Значение = ТекстовоеЗначение;
+ Назначение = НазначениеТекста;
+ КодироватьЗначение = Ложь;
РазделительТелаЗапроса = "&";
+ ТипMIME = "";
+ Заголовки = Новый Соответствие();
-КонецПроцедуры
\ No newline at end of file
+КонецПроцедуры
diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\244\320\260\320\271\320\273.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\244\320\260\320\271\320\273.os"
index 3b87b02..3ef68d8 100644
--- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\244\320\260\320\271\320\273.os"
+++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\265\321\200\320\265\320\264\320\260\320\262\320\260\320\265\320\274\321\213\320\271\320\244\320\260\320\271\320\273.os"
@@ -1,23 +1,54 @@
-Перем ИмяФайла Экспорт; // Строка
+// BSLLS:ExportVariables-off
+
+// Полный путь к файлу на устройстве
+Перем ПолноеИмяФайла Экспорт; // Строка
+
+// Назначение файла
Перем Назначение Экспорт; // см. НазначенияПередаваемыхДанных
+
+// Отправляет этот файл в отдельности от других данных
Перем ОтправлятьОтдельно Экспорт; // Булево
+
+// Читает текстовое содержимое файла
Перем ПрочитатьСодержимое Экспорт; // Булево
+
+// Кодирует содержимое файла после чтения
Перем КодироватьСодержимое Экспорт; // Булево
+
+// Удалять переносы строк
Перем УдалятьПереносыСтрок Экспорт; // Булево
+
+// Разделитель при формировании тела запроса или строки запроса
Перем РазделительТелаЗапроса Экспорт; // Строка
+
+// Добавлять, по возможности, имя файла к URL
Перем ДобавлятьИмяФайлаКURL Экспорт; // Булево
-Перем Ключ Экспорт; // Строка
-Процедура ПриСозданииОбъекта(пИмяФайла = "", пНазначение = Неопределено)
+// Имя поля на форме или в строке запроса
+Перем ИмяПоля Экспорт; // Строка
+
+// Имя файла (multipart/form-data)
+Перем ИмяФайла Экспорт; // Строка
+
+// MIME-тип файла (multipart/form-data)
+Перем ТипMIME Экспорт; // Строка
+
+// HTTP заголовки запроса (multipart/form-data)
+Перем Заголовки Экспорт; // Соответствие
+
+Процедура ПриСозданииОбъекта(ПутьКФайлу = "", НазначениеФайла = Неопределено)
- ИмяФайла = пИмяФайла;
- Назначение = пНазначение;
+ ПолноеИмяФайла = ПутьКФайлу;
+ Назначение = НазначениеФайла;
ОтправлятьОтдельно = Ложь;
ПрочитатьСодержимое = Ложь;
КодироватьСодержимое = Ложь;
УдалятьПереносыСтрок = Ложь;
РазделительТелаЗапроса = "&";
ДобавлятьИмяФайлаКURL = Ложь;
- Ключ = "";
+ ИмяПоля = "";
+ ИмяФайла = "";
+ ТипMIME = "";
+ Заголовки = Новый Соответствие();
КонецПроцедуры
\ No newline at end of file
diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260.os"
new file mode 100644
index 0000000..7b05c03
--- /dev/null
+++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260.os"
@@ -0,0 +1,301 @@
+#Область ПрограммныйИнтерфейс
+
+Функция ЧтениеТекстовыхФайлов(Файлы, ПрочитанныеФайлы) Экспорт
+
+ Конструктор = Новый КонструкторПрограммногоКода();
+
+ НомерФайла = 1;
+ Для Каждого ПередаваемыйФайл Из Файлы Цикл
+
+ Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
+ Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если НомерФайла > 1 Тогда
+ Конструктор.ДобавитьПустуюСтроку();
+ КонецЕсли;
+
+ Шаблон = "ЧтениеТекста = Новый ЧтениеТекста(%2);
+ |%1 = ЧтениеТекста.Прочитать();";
+
+ Если ПередаваемыйФайл.УдалятьПереносыСтрок Тогда
+ Шаблон = Шаблон + "
+ |%1 = СтрЗаменить(%1, Символы.ПС, """");
+ |%1 = СтрЗаменить(%1, Символы.ВК, """");";
+ КонецЕсли;
+
+ Если ПередаваемыйФайл.КодироватьСодержимое Тогда
+ Шаблон = Шаблон + "
+ |%1 = КодироватьСтроку(%1, СпособКодированияСтроки.КодировкаURL);";
+ КонецЕсли;
+
+ ИмяПеременной = "ТекстовыеДанныеФайла_" + Формат(НомерФайла, "ЧГ=");
+
+ Конструктор.ДобавитьСтроку(Шаблон,
+ ИмяПеременной,
+ Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
+
+ ПрочитанныйФайл = Новый Структура();
+ ПрочитанныйФайл.Вставить("ПередаваемыйФайл", ПередаваемыйФайл);
+ ПрочитанныйФайл.Вставить("ИмяПеременной", ИмяПеременной);
+
+ ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
+
+ НомерФайла = НомерФайла + 1;
+ КонецЦикла;
+
+ Возврат Конструктор.ПолучитьРезультат();
+
+КонецФункции
+
+Функция СборкаДанныхЗапросаВСтроку(НазначениеДанных, ТекстовыеДанные, ПрочитанныеФайлы) Экспорт
+
+ Конструктор = Новый КонструкторПрограммногоКода();
+ ЧастиКода = Новый Массив();
+
+ КонкатенацияСПереносомСтрокиИРазделителя = "
+ | + ""%1"" + %2";
+ КонкатенацияСПереносомСтроки = "
+ | + %1";
+
+ НуженРазделитель = Ложь;
+ МассивТекстовыхДанных = Новый Массив();
+ Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл
+ Если Не ПередаваемыйТекст.Назначение = НазначениеДанных Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Разделитель = ПередаваемыйТекст.РазделительТелаЗапроса;
+ Если НуженРазделитель И Не ПустаяСтрока(Разделитель) Тогда
+ МассивТекстовыхДанных.Добавить(Разделитель);
+ КонецЕсли;
+
+ МассивТекстовыхДанных.Добавить(ПередаваемыйТекст.ПолноеЗначение());
+
+ НуженРазделитель = Истина;
+ КонецЦикла;
+
+ Если МассивТекстовыхДанных.Количество() Тогда
+ ЧастиКода.Добавить(Конструктор.ПараметрВСтроку(СтрСоединить(МассивТекстовыхДанных)));
+ КонецЕсли;
+
+ Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
+
+ ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
+
+ Если Не ПередаваемыйФайл.Назначение = НазначениеДанных Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
+ Префикс = ПередаваемыйФайл.ИмяПоля + "=";
+ ПрефиксВКоде = Конструктор.ПараметрВСтроку(Префикс) + " + ";
+ Иначе
+ Префикс = "";
+ ПрефиксВКоде = "";
+ КонецЕсли;
+
+ ИмяПеременной = ПрочитанныйФайл.ИмяПеременной;
+ Разделитель = ПередаваемыйФайл.РазделительТелаЗапроса;
+ Если НуженРазделитель Тогда
+
+ Если Не ПустаяСтрока(Разделитель) Тогда
+
+ Текст = СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителя,
+ ПередаваемыйФайл.РазделительТелаЗапроса + Префикс,
+ ИмяПеременной);
+
+ ЧастиКода.Добавить(Текст);
+
+ Иначе
+
+ Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрефиксВКоде + ИмяПеременной);
+ ЧастиКода.Добавить(Текст);
+
+ КонецЕсли;
+
+ Иначе
+
+ ЧастиКода.Добавить(ПрефиксВКоде + ИмяПеременной);
+
+ КонецЕсли;
+
+ НуженРазделитель = Истина;
+ КонецЦикла;
+
+ Возврат СтрСоединить(ЧастиКода);
+
+КонецФункции
+
+Функция СборкаURL(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
+
+ Пользователь = СтруктураURL.Аутентификация.Пользователь;
+ Пароль = СтруктураURL.Аутентификация.Пароль;
+
+ Аутентификация = "";
+ Если Не ПустаяСтрока(Пользователь) Или Не ПустаяСтрока(Пароль) Тогда
+ Аутентификация = СтрШаблон("%1:%2@", Пользователь, Пароль);
+ КонецЕсли;
+
+ СборкаАдресаРесурса = СборкаАдресаРесурса(СтруктураURL, ТекстовыеДанные, ПрочитанныеФайлы);
+
+ Возврат """"
+ + СтруктураURL.Схема + "://"
+ + Аутентификация
+ + СтруктураURL.Сервер
+ + Формат(СтруктураURL.Порт, "ЧГ=; ЧФ=:Ч")
+ + ?(ПустаяСтрока(СборкаАдресаРесурса), """", Сред(СборкаАдресаРесурса, 2));
+
+КонецФункции
+
+Функция СборкаАдресаРесурса(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
+
+ Конструктор = Новый КонструкторПрограммногоКода();
+
+ РазделительПараметров = "&";
+ КонкатенацияСПереносомСтрокиИРазделителем = "
+ | + ""%1"" + ";
+ КонкатенацияСПереносомСтроки = "
+ | + ";
+
+ ПараметрыЗапроса = Новый Массив();
+
+ // Исходные параметры запроса
+ Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл
+ КлючИЗначение = СтрШаблон("%1=%2",
+ КодироватьСтроку(Параметр.Ключ, СпособКодированияСтроки.КодировкаURL),
+ КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL));
+
+ ПараметрыЗапроса.Добавить(КлючИЗначение);
+ КонецЦикла;
+
+ // Дополняемые параметры запроса
+ Если Не ТекстовыеДанные = Неопределено Тогда
+ Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл
+ Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
+ Если ПараметрыЗапроса.Количество() И Не ПустаяСтрока(ПередаваемыйТекст.РазделительТелаЗапроса) Тогда
+ ПараметрыЗапроса.Добавить(ПередаваемыйТекст.РазделительТелаЗапроса);
+ КонецЕсли;
+ ПараметрыЗапроса.Добавить(ПередаваемыйТекст.ПолноеЗначение());
+ КонецЕсли;
+ КонецЦикла;
+ КонецЕсли;
+
+ // Параметры запроса из файлов
+ ПараметрыЗапросаИзФайловСтрокой = "";
+ Если Не ПрочитанныеФайлы = Неопределено Тогда
+ Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
+
+ ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
+
+ Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
+ Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
+ Префикс = ПередаваемыйФайл.ИмяПоля + "=";
+ ПрефиксВКоде = Конструктор.ПараметрВСтроку(Префикс) + " + ";
+ Иначе
+ Префикс = "";
+ ПрефиксВКоде = "";
+ КонецЕсли;
+
+ ИмяПеременной = ПрочитанныйФайл.ИмяПеременной;
+
+ Если ПараметрыЗапросаИзФайловСтрокой = "" Тогда
+ ПараметрыЗапросаИзФайловСтрокой = ПрефиксВКоде + ИмяПеременной;
+ Иначе
+ ПараметрыЗапросаИзФайловСтрокой = ПараметрыЗапросаИзФайловСтрокой
+ + СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителем, РазделительПараметров + Префикс)
+ + ИмяПеременной;
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЦикла;
+ КонецЕсли;
+
+ // Сборка адреса
+ ПараметрыЗапросаСтрокой = СтрСоединить(ПараметрыЗапроса);
+ ЕстьПараметрыЗапроса = Не ПустаяСтрока(ПараметрыЗапросаСтрокой) Или Не ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой);
+
+ ПерваяЧасть = СтруктураURL.Путь
+ + ?(ЕстьПараметрыЗапроса, "?", "")
+ + ПараметрыЗапросаСтрокой;
+
+ ВтораяЧасть = ?(Не ПустаяСтрока(СтруктураURL.Фрагмент), "#" + СтруктураURL.Фрагмент, "");
+
+ Если ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой) Тогда
+
+ Результат = ПерваяЧасть + ВтораяЧасть;
+
+ Если ЗначениеЗаполнено(Результат) Тогда
+ Результат = Конструктор.ПараметрВСтроку(Результат);
+ КонецЕсли;
+
+ Иначе
+
+ ВозможноОднойСтрокой = ПустаяСтрока(ВтораяЧасть) И СтрЧислоСтрок(ПараметрыЗапросаИзФайловСтрокой) = 1;
+
+ Если ВозможноОднойСтрокой Тогда
+
+ Результат = ""
+ + Конструктор.ПараметрВСтроку(ПерваяЧасть + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), "", РазделительПараметров))
+ + " + "
+ + ПараметрыЗапросаИзФайловСтрокой;
+
+ Иначе
+
+ Результат = Конструктор.ПараметрВСтроку(ПерваяЧасть);
+
+ Если ПустаяСтрока(ПараметрыЗапросаСтрокой) Тогда
+ Результат = Результат
+ + КонкатенацияСПереносомСтроки
+ + ПараметрыЗапросаИзФайловСтрокой;
+ ИначеЕсли Лев(ПараметрыЗапросаИзФайловСтрокой, 1) = """" Тогда
+ Результат = Результат
+ + КонкатенацияСПереносомСтроки
+ + """" + РазделительПараметров
+ + Сред(ПараметрыЗапросаИзФайловСтрокой, 2);
+ Иначе
+ Результат = Результат
+ + СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителем, РазделительПараметров)
+ + ПараметрыЗапросаИзФайловСтрокой;
+ КонецЕсли;
+
+ Если Не ПустаяСтрока(ВтораяЧасть) Тогда
+ Результат = Результат
+ + КонкатенацияСПереносомСтроки
+ + Конструктор.ПараметрВСтроку(ВтораяЧасть);
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметра) Экспорт
+
+ Конструктор = Новый КонструкторПрограммногоКода();
+
+ ИспользоватьАутентификациюОС = ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM;
+
+ ПараметрыФункции = Новый Массив;
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиПротокол));
+ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиСервер));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПорт));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПользователь));
+ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПароль));
+ ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина
+
+ Конструктор
+ .ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметра)
+ .ДобавитьСтроку("%1.Установить(%2);",
+ ИмяПараметра,
+ Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
+
+ Возврат Конструктор.ПолучитьРезультат();
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os"
index a3c3b9d..0bece85 100644
--- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os"
+++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.os"
@@ -20,6 +20,32 @@
КонецЕсли;
КонецФункции
+Функция ДополнитьИменемФайлаПутьURL(ПолноеИмяФайла, ПутьURL) Экспорт
+
+ Файл = Новый Файл(ПолноеИмяФайла);
+
+ Если ПустаяСтрока(ПутьURL) Тогда
+ Возврат "/" + Файл.Имя;
+ ИначеЕсли Прав(ПутьURL, 1) = "/" Тогда
+ Возврат ПутьURL + Файл.Имя;
+ Иначе
+ Возврат ПутьURL;
+ КонецЕсли;
+
+КонецФункции
+
+Функция ПротоколПроксиПоддерживатся(Прокси) Экспорт
+
+ ПоддерживаемыеПротоколыПрокси = Новый Массив();
+ ПоддерживаемыеПротоколыПрокси.Добавить(ПротоколыURL.HTTP);
+ ПоддерживаемыеПротоколыПрокси.Добавить(ПротоколыURL.HTTPS);
+ ПоддерживаемыеПротоколыПрокси.Добавить(ПротоколыURL.FTP);
+ ПоддерживаемыеПротоколыПрокси.Добавить(ПротоколыURL.FTPS);
+
+ Возврат ПоддерживаемыеПротоколыПрокси.Найти(Прокси) <> Неопределено;
+
+КонецФункции
+
Функция ЕстьКритичныеОшибки(Ошибки) Экспорт
Для Каждого Ошибка Из Ошибки Цикл
Если Ошибка.Критичная Тогда
diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\320\275\320\270\320\262\320\265\321\200\321\201\320\260\320\273\321\214\320\275\321\213\320\265\320\221\320\273\320\276\320\272\320\270\320\232\320\276\320\264\320\260.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\320\275\320\270\320\262\320\265\321\200\321\201\320\260\320\273\321\214\320\275\321\213\320\265\320\221\320\273\320\276\320\272\320\270\320\232\320\276\320\264\320\260.os"
deleted file mode 100644
index ee6b932..0000000
--- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\243\320\275\320\270\320\262\320\265\321\200\321\201\320\260\320\273\321\214\320\275\321\213\320\265\320\221\320\273\320\276\320\272\320\270\320\232\320\276\320\264\320\260.os"
+++ /dev/null
@@ -1,127 +0,0 @@
-#Область ПрограммныйИнтерфейс
-
-Функция ЧтениеТекстовыхФайлов(Файлы, ПрочитанныеФайлы) Экспорт
-
- Конструктор = Новый КонструкторПрограммногоКода();
-
- НомерФайла = 1;
- Для Каждого ПередаваемыйФайл Из Файлы Цикл
-
- Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
- Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
- Продолжить;
- КонецЕсли;
-
- Если НомерФайла > 1 Тогда
- Конструктор.ДобавитьПустуюСтроку();
- КонецЕсли;
-
- Шаблон = "ЧтениеТекста = Новый ЧтениеТекста(%2);
- |%1 = ЧтениеТекста.Прочитать();";
-
- Если ПередаваемыйФайл.УдалятьПереносыСтрок Тогда
- Шаблон = Шаблон + "
- |%1 = СтрЗаменить(%1, Символы.ПС, """");
- |%1 = СтрЗаменить(%1, Символы.ВК, """");";
- КонецЕсли;
-
- Если ПередаваемыйФайл.КодироватьСодержимое Тогда
- Шаблон = Шаблон + "
- |%1 = КодироватьСтроку(%1, СпособКодированияСтроки.URLВКодировкеURL);";
- КонецЕсли;
-
- Если ЗначениеЗаполнено(ПередаваемыйФайл.Ключ) Тогда
- Шаблон = Шаблон + "
- |%1 = """ + ПередаваемыйФайл.Ключ + "="" + %1;";
- КонецЕсли;
-
- ИмяПеременной = "ТекстовыеДанныеФайла_" + Формат(НомерФайла, "ЧГ=");
-
- Конструктор.ДобавитьСтроку(Шаблон,
- ИмяПеременной,
- Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла));
-
- ПрочитанныйФайл = Новый Структура();
- ПрочитанныйФайл.Вставить("ПередаваемыйФайл", ПередаваемыйФайл);
- ПрочитанныйФайл.Вставить("ИмяПеременной", ИмяПеременной);
-
- ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
-
- НомерФайла = НомерФайла + 1;
- КонецЦикла;
-
- Возврат Конструктор.ПолучитьРезультат();
-
-КонецФункции
-
-Функция СборкаТелаЗапроса(ТекстовыеДанные, ПрочитанныеФайлы) Экспорт
-
- Конструктор = Новый КонструкторПрограммногоКода();
- ТелоЗапроса = Новый Массив();
-
- КонкатенацияСПереносомСтрокиИРазделителя = "
- | + ""%1"" + %2";
- КонкатенацияСПереносомСтроки = "
- | + %1";
-
- НуженРазделитель = Ложь;
- МассивТекстовыхДанных = Новый Массив();
- Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл
- Если Не ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
- Продолжить;
- КонецЕсли;
-
- Разделитель = ПередаваемыйТекст.РазделительТелаЗапроса;
- Если НуженРазделитель И Не ПустаяСтрока(Разделитель) Тогда
- МассивТекстовыхДанных.Добавить(Разделитель);
- КонецЕсли;
-
- МассивТекстовыхДанных.Добавить(ПередаваемыйТекст.Значение);
-
- НуженРазделитель = Истина;
- КонецЦикла;
-
- Если МассивТекстовыхДанных.Количество() Тогда
- ТелоЗапроса.Добавить(Конструктор.ПараметрВСтроку(СтрСоединить(МассивТекстовыхДанных)));
- КонецЕсли;
-
- Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
-
- ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
-
- Если Не ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
- Продолжить;
- КонецЕсли;
-
- Разделитель = ПередаваемыйФайл.РазделительТелаЗапроса;
- Если НуженРазделитель Тогда
-
- Если Не ПустаяСтрока(Разделитель) Тогда
-
- Текст = СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителя,
- ПередаваемыйФайл.РазделительТелаЗапроса,
- ПрочитанныйФайл.ИмяПеременной);
-
- ТелоЗапроса.Добавить(Текст);
-
- Иначе
-
- Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрочитанныйФайл.ИмяПеременной);
- ТелоЗапроса.Добавить(Текст);
-
- КонецЕсли;
-
- Иначе
-
- ТелоЗапроса.Добавить(ПрочитанныйФайл.ИмяПеременной);
-
- КонецЕсли;
-
- НуженРазделитель = Истина;
- КонецЦикла;
-
- Возврат СтрСоединить(ТелоЗапроса);
-
-КонецФункции
-
-#КонецОбласти
\ No newline at end of file
diff --git a/src/main.os b/src/main.os
index dfe87a0..23e8cd6 100644
--- a/src/main.os
+++ b/src/main.os
@@ -4,7 +4,6 @@
#Использовать autumn
#Использовать autumn-cli
#Использовать winow
-#Использовать coloratos
#Использовать "core"
#Использовать "cli"
@@ -12,8 +11,9 @@
ИнициализацияТекущегоКаталога();
- Если ЕстьКомандаКонвертации() Тогда
- КонвертироватьИВывестиВКонсоль();
+ КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(АргументыКоманднойСтроки);
+ Если КонсольныйКонвертер.НайденаКоманда() Тогда
+ КонсольныйКонвертер.Конвертировать();
Иначе
Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();
@@ -21,48 +21,6 @@
КонецПроцедуры
-Процедура КонвертироватьИВывестиВКонсоль()
-
- Аргументы = Новый Массив();
- ОбщегоНазначения.ДополнитьМассив(Аргументы, АргументыКоманднойСтроки);
- Аргументы[0] = "curl";
-
- Если Аргументы.Количество() > 1
- И Аргументы[1] = "curl" Тогда
- Аргументы.Удалить(0);
- КонецЕсли;
-
- Ошибки = Новый Массив();
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
-
- Попытка
- Результат = КонвертерКомандыCURL.Конвертировать(Аргументы, Новый ГенераторПрограммногоКода1С(), Ошибки);
- Исключение
- Результат = "";
- Ошибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())));
- КонецПопытки;
-
- Для Каждого Ошибка Из Ошибки Цикл
- Цвет = ?(Ошибка.Критичная, "Красный", "Желтый");
- ЦветнойВывод.Вывести("// ");
- ЦветнойВывод.ВывестиСтроку(Ошибка.Текст, Цвет);
- КонецЦикла;
-
- Если ЗначениеЗаполнено(Результат) Тогда
- Если Ошибки.Количество() Тогда
- Консоль.Вывести(Символы.ПС);
- КонецЕсли;
-
- Консоль.Вывести(Результат);
- КонецЕсли;
-
-КонецПроцедуры
-
-Функция ЕстьКомандаКонвертации()
- Возврат АргументыКоманднойСтроки.Количество()
- И АргументыКоманднойСтроки[0] = "convert";
-КонецФункции
-
Процедура ИнициализацияТекущегоКаталога()
ТекущийКаталог = Новый Файл(ОбъединитьПути(ТекущийСценарий().Каталог, "..")).ПолноеИмя;
УстановитьТекущийКаталог(ТекущийКаталог);
diff --git "a/tests/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241_test.os" "b/tests/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241_test.os"
index bfe323d..3be08b2 100644
--- "a/tests/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241_test.os"
+++ "b/tests/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\2601\320\241_test.os"
@@ -1,6 +1,17 @@
#Использовать asserts
#Использовать ".."
+Перем КонвертерКомандыCURL; // см. КонвертерКомандыCURL
+Перем Генератор; // см. ГенераторПрограммногоКода1С
+
+&Инициализация
+Процедура ПередЗапускомТестов() Экспорт
+
+ КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
+ Генератор = Новый ГенераторПрограммногоКода1С();
+
+КонецПроцедуры
+
&Тест
Процедура ТестДолжен_ПроверитьЗаголовки() Экспорт
@@ -19,11 +30,8 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
-
КонецПроцедуры
&Тест
@@ -47,15 +55,12 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
&Тест
-Процедура ТестДолжен_ПроверитьПередачуМетода() Экспорт
+Процедура ТестДолжен_ПроверитьПередачуМетодаPOST() Экспорт
КонсольнаяКоманда = "curl http://example.com -X POST";
@@ -64,10 +69,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -81,10 +83,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -128,10 +127,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -167,10 +163,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -188,10 +181,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -220,10 +210,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -238,10 +225,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -264,10 +248,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -297,8 +278,7 @@
Ошибки = Неопределено;
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С(), Ошибки);
+ Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
Ожидаем.Что(Ошибки).Заполнено();
@@ -320,10 +300,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -345,10 +322,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -368,10 +342,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -380,7 +351,7 @@
КонсольнаяКоманда = "curl http://example.com \
| --data-urlencode name=val \
- | --data-urlencode '=encodethis&' \
+ | --data-urlencode '=encodethis=&' \
| --data-urlencode name@file \
| --data-urlencode @fileonly";
@@ -389,15 +360,14 @@
|
|ЧтениеТекста = Новый ЧтениеТекста(""file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
- |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
- |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1;
+ |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
|
|ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
|ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
- |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL);
+ |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.КодировкаURL);
|
- |ТелоЗапроса = ""name=val&encodethis%26""
- | + ""&"" + ТекстовыеДанныеФайла_1
+ |ТелоЗапроса = ""name=val&encodethis%3D%26""
+ | + ""&name="" + ТекстовыеДанныеФайла_1
| + ""&"" + ТекстовыеДанныеФайла_2;
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
@@ -406,10 +376,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -445,15 +412,12 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
&Тест
-Процедура ТестДолжен_ПроверитьПередачуОтправляемыхДанныхВСтрокуЗапроса() Экспорт
+Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапроса() Экспорт
КонсольнаяКоманда = "curl http://example.com \
| --get \
@@ -467,22 +431,16 @@
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
- |
- |АдресРесурса = ""/?param1=value¶m2=value2""
- | + ""&"" + ТекстовыеДанныеФайла_1;
- |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
+ |HTTPЗапрос = Новый HTTPЗапрос(""?param1=value¶m2=value2&"" + ТекстовыеДанныеФайла_1);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
&Тест
-Процедура ТестДолжен_ПроверитьПередачуОтправляемыхДанныхВСтрокуЗапросаИзФайла() Экспорт
+Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапросаИзФайла() Экспорт
КонсольнаяКоманда = "curl http://example.com \
| --get \
@@ -494,22 +452,16 @@
|ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
- |
- |АдресРесурса = ""/?""
- | + ТекстовыеДанныеФайла_1;
- |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
+ |HTTPЗапрос = Новый HTTPЗапрос(""?"" + ТекстовыеДанныеФайла_1);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
&Тест
-Процедура ТестДолжен_ПроверитьВставкуОтправляемыхДанныхВСтрокуЗапроса() Экспорт
+Процедура ТестДолжен_ПроверитьВставкуДанныхВСтрокуЗапроса() Экспорт
КонсольнаяКоманда = "curl 'http://example.com?param3=value3#page-1' \
| --get \
@@ -524,17 +476,14 @@
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
- |АдресРесурса = ""/?param3=value3¶m1=value¶m2=value2""
- | + ""&"" + ТекстовыеДанныеФайла_1
+ |АдресРесурса = ""?param3=value3¶m1=value¶m2=value2""
+ | + ""&"" + ТекстовыеДанныеФайла_1
| + ""#page-1"";
|HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -545,7 +494,7 @@
|curl http://example1.com --head
|curl http://example2.com -X HEAD";
- ПрограммныйКод = "//////////////////////////////////////////////
+ ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Соединение = Новый HTTPСоединение(""example1.com"", 80);
@@ -553,7 +502,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""HEAD"", HTTPЗапрос);
|
- |//////////////////////////////////////////////
+ |//////////////////////////////////////////////
|// Команда #2.
|
|Соединение = Новый HTTPСоединение(""example2.com"", 80);
@@ -561,10 +510,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""HEAD"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -573,7 +519,7 @@
КонсольнаяКоманда = "curl http://example1.com & curl http://example2.com";
- ПрограммныйКод = "//////////////////////////////////////////////
+ ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Соединение = Новый HTTPСоединение(""example1.com"", 80);
@@ -581,7 +527,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);
|
- |//////////////////////////////////////////////
+ |//////////////////////////////////////////////
|// Команда #2.
|
|Соединение = Новый HTTPСоединение(""example2.com"", 80);
@@ -589,10 +535,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -606,10 +549,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -625,10 +565,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -651,10 +588,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -677,10 +611,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -697,10 +628,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -717,10 +645,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -738,10 +663,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -760,10 +682,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -772,7 +691,7 @@
КонсольнаяКоманда = "curl http://example.com \
| --url-query name=val \
- | --url-query =encodethis& \
+ | --url-query '=encodethis=&' \
| --url-query name@file \
| --url-query @fileonly \
| --url-query '+name=%20foo' \
@@ -780,26 +699,22 @@
ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
- |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
- |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1;
+ |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
|
|ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
|ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
- |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL);
+ |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.КодировкаURL);
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
- |АдресРесурса = ""/?name=val&encodethis%26&name=%20foo&@not-a-file""
- | + ""&"" + ТекстовыеДанныеФайла_1
+ |АдресРесурса = ""?name=val&encodethis%3D%26&name=%20foo&@not-a-file""
+ | + ""&name="" + ТекстовыеДанныеФайла_1
| + ""&"" + ТекстовыеДанныеФайла_2;
|HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -810,20 +725,14 @@
ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
|ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
- |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL);
+ |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
- |
- |АдресРесурса = ""/?""
- | + ТекстовыеДанныеФайла_1;
- |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
+ |HTTPЗапрос = Новый HTTPЗапрос(""?"" + ТекстовыеДанныеФайла_1);
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -838,15 +747,12 @@
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
|Соединение = Новый HTTPСоединение(""example.com"", 80);
- |HTTPЗапрос = Новый HTTPЗапрос(""/?name=val"", Заголовки);
+ |HTTPЗапрос = Новый HTTPЗапрос(""?name=val"", Заголовки);
|HTTPЗапрос.УстановитьИмяФайлаТела(""path-to-file"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -860,10 +766,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""file.html"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -886,10 +789,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""page2.html"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -919,10 +819,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -952,10 +849,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""index.html"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -966,8 +860,7 @@
Ошибки = Неопределено;
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
+ Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -990,10 +883,7 @@
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");";
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1011,10 +901,7 @@
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");";
ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути());
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1031,10 +918,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1058,10 +942,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1080,10 +961,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1102,10 +980,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1116,8 +991,7 @@
Ошибки = Неопределено;
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
+ Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -1136,10 +1010,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1153,10 +1024,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1184,10 +1052,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1206,10 +1071,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1230,10 +1092,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1260,10 +1119,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1280,10 +1136,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1300,10 +1153,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1317,10 +1167,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1337,10 +1184,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1351,7 +1195,7 @@
|curl http://example2.com -d 'key=value'
|curl http://example3.com";
- ПрограммныйКод = "//////////////////////////////////////////////
+ ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Заголовки = Новый Соответствие();
@@ -1362,7 +1206,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);
|
- |//////////////////////////////////////////////
+ |//////////////////////////////////////////////
|// Команда #2.
|
|Заголовки = Новый Соответствие();
@@ -1374,7 +1218,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);
|
- |//////////////////////////////////////////////
+ |//////////////////////////////////////////////
|// Команда #3.
|
|Соединение = Новый HTTPСоединение(""example3.com"", 80);
@@ -1382,10 +1226,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1402,10 +1243,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1418,10 +1256,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1436,10 +1271,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1452,10 +1284,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1471,10 +1300,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1487,10 +1313,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1503,10 +1326,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1521,8 +1341,7 @@
Ошибки = Неопределено;
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С(), Ошибки);
+ Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
Ожидаем.Что(Ошибки).Заполнено();
@@ -1540,10 +1359,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1561,10 +1377,7 @@
|
|Соединение.Получить(""/file.txt"", ""path/to/file"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1577,10 +1390,7 @@
|
|Соединение.Записать(""path/to/file.txt"", ""/newfile.txt"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1593,10 +1403,7 @@
|
|Соединение.Записать(""path/to/file.txt"", ""/file.txt"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1609,10 +1416,7 @@
|
|Соединение.Записать(""path/to/file.txt"", ""/dir/file.txt"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1625,10 +1429,7 @@
|
|Файлы = Соединение.НайтиФайлы(""/dir"", ""*"");";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
-
- Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
КонецПроцедуры
@@ -1641,9 +1442,17 @@
|
|Файл = Соединение.НайтиФайлы(""/dir/file.txt"")[0];";
- КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
- Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+Процедура ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод)
+
+ Ошибки = Неопределено;
+
+ Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
-
+ Ожидаем.Что(Ошибки).Не_().Заполнено();
+
КонецПроцедуры
\ No newline at end of file
diff --git "a/tests/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP_test.os" "b/tests/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP_test.os"
new file mode 100644
index 0000000..1737d8c
--- /dev/null
+++ "b/tests/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\237\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\275\320\276\320\263\320\276\320\232\320\276\320\264\320\260\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP_test.os"
@@ -0,0 +1,1202 @@
+#Использовать asserts
+#Использовать ".."
+
+Перем КонвертерКомандыCURL; // см. КонвертерКомандыCURL
+Перем Генератор; // см. ГенераторПрограммногоКодаКоннекторHTTP
+
+&Инициализация
+Процедура ПередЗапускомТестов() Экспорт
+
+ КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
+ Генератор = Новый ГенераторПрограммногоКодаКоннекторHTTP();
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьЗаголовки() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | -H 'accept: text/html' \
+ | -H 'accept-language: ru,en-US;q=0.9,en;q=0.8' \
+ | -H 'user-agent: curl'";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""accept"", ""text/html"");
+ |Заголовки.Вставить(""accept-language"", ""ru,en-US;q=0.9,en;q=0.8"");
+ |Заголовки.Вставить(""user-agent"", ""curl"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИнициализациюЗаголовковТолькоОдинРаз() Экспорт
+
+ КонсольнаяКоманда = "curl http://example1.com/page1 http://example2.com/page2 \
+ | -H 'accept: text/html";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""accept"", ""text/html"");
+ |
+ |// Запрос 1. http://example1.com/page1
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example1.com/page1"", , ДополнительныеПараметры);
+ |
+ |// Запрос 2. http://example2.com/page2
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example2.com/page2"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуМетодаPOST() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com -X POST";
+
+ ПрограммныйКод = "Результат = КоннекторHTTP.Post(""http://example.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуПользователя() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com -u user:secret";
+
+ ПрограммныйКод = "Аутентификация = Новый Структура(""Пользователь, Пароль"", ""user"", ""secret"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Аутентификация"", Аутентификация);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуТекстовыхДанныхИзАргументовИФайлов() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | -d param1=value1 \
+ | --data-ascii 'парам2=значение2' \
+ | --data 'param3=value3' \
+ | --data @path-to-file1 \
+ | --data @path-to-file2 \
+ | --data-raw '@at@at@' \
+ | --data-binary @path-to-file3 \
+ | --data-binary 'param4=value4'";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2"");
+ |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_2 = СтрЗаменить(ТекстовыеДанныеФайла_2, Символы.ПС, """");
+ |ТекстовыеДанныеФайла_2 = СтрЗаменить(ТекстовыеДанныеФайла_2, Символы.ВК, """");
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file3"");
+ |ТекстовыеДанныеФайла_3 = ЧтениеТекста.Прочитать();
+ |
+ |Данные = ""param1=value1&парам2=значение2¶m3=value3&@at@at@¶m4=value4""
+ | + ""&"" + ТекстовыеДанныеФайла_1
+ | + ""&"" + ТекстовыеДанныеФайла_2
+ | + ""&"" + ТекстовыеДанныеФайла_3;
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИнициализациюТелаЗапросаТолькоОдинРаз() Экспорт
+
+ КонсольнаяКоманда = "curl http://example1.com http://example2.com \
+ | -d param=value \
+ | --data @path-to-file";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
+ |
+ |Данные = ""param=value""
+ | + ""&"" + ТекстовыеДанныеФайла_1;
+ |
+ |// Запрос 1. http://example1.com
+ |Результат = КоннекторHTTP.Post(""http://example1.com"", Данные);
+ |
+ |// Запрос 2. http://example2.com
+ |Результат = КоннекторHTTP.Post(""http://example2.com"", Данные);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуОдногоФайлаИзDataBinary() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com --data-binary @path-to-file1";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", ТекстовыеДанныеФайла_1);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуДвухФайловИзDataBinary() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --data-binary @path-to-file1 \
+ | --data-binary @path-to-file2";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2"");
+ |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
+ |
+ |Данные = ТекстовыеДанныеФайла_1
+ | + ""&"" + ТекстовыеДанныеФайла_2;
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуФайла() Экспорт
+
+ КонсольнаяКоманда = "curl --upload-file path/to/file.txt http://example.com";
+
+ ПрограммныйКод = "Данные = Новый ДвоичныеДанные(""path/to/file.txt"");
+ |Результат = КоннекторHTTP.Put(""http://example.com/file.txt"", Данные);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуНесколькихФайловПоОдномуURL() Экспорт
+
+ КонсольнаяКоманда = "curl --upload-file {path/to/file1.txt,path/to/file2.txt} http://example.com";
+
+ ПрограммныйКод = "// Передача файла 1. path/to/file1.txt
+ |Данные = Новый ДвоичныеДанные(""path/to/file1.txt"");
+ |Результат = КоннекторHTTP.Put(""http://example.com/file1.txt"", Данные);
+ |
+ |// Передача файла 2. path/to/file2.txt
+ |Данные = Новый ДвоичныеДанные(""path/to/file2.txt"");
+ |Результат = КоннекторHTTP.Put(""http://example.com/file2.txt"", Данные);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИгнорированиеПередаваемыхФайловПриПревышенииКоличестваURL() Экспорт
+
+ КонсольнаяКоманда = "curl \
+ | -T path/to/file1.txt \
+ | -T path/to/file2.txt \
+ | -T path/to/file3.txt \
+ | -T path/to/file4.txt \
+ | http://example1.com http://example2.com";
+
+ ПрограммныйКод = "// Запрос 1. http://example1.com
+ |Данные = Новый ДвоичныеДанные(""path/to/file1.txt"");
+ |Результат = КоннекторHTTP.Put(""http://example1.com/file1.txt"", Данные);
+ |
+ |// Запрос 2. http://example2.com
+ |Данные = Новый ДвоичныеДанные(""path/to/file2.txt"");
+ |Результат = КоннекторHTTP.Put(""http://example2.com/file2.txt"", Данные);";
+
+ Ошибки = Неопределено;
+
+ Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
+
+ Ожидаем.Что(Результат).Равно(ПрограммныйКод);
+ Ожидаем.Что(Ошибки).Заполнено();
+ Ожидаем.Что(Ошибки[0].Текст).Равно("Файл 'path/to/file3.txt' опции -T, --upload-file было проигнорировано");
+ Ожидаем.Что(Ошибки[0].Критичная).ЭтоЛожь();
+ Ожидаем.Что(Ошибки[1].Текст).Равно("Файл 'path/to/file4.txt' опции -T, --upload-file было проигнорировано");
+ Ожидаем.Что(Ошибки[1].Критичная).ЭтоЛожь();
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИспользованиеМетодаPUTиGETДляРазныхURL() Экспорт
+
+ КонсольнаяКоманда = "curl --upload-file path/to/file.txt http://example1.com http://example2.com";
+
+ ПрограммныйКод = "// Запрос 1. http://example1.com
+ |Данные = Новый ДвоичныеДанные(""path/to/file.txt"");
+ |Результат = КоннекторHTTP.Put(""http://example1.com/file.txt"", Данные);
+ |
+ |// Запрос 2. http://example2.com
+ |Результат = КоннекторHTTP.Get(""http://example2.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуТекстовыхДанныхСКодированием() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --data-urlencode name=val \
+ | --data-urlencode '=encodethis=&' \
+ | --data-urlencode name@file \
+ | --data-urlencode @fileonly";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
+ |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.КодировкаURL);
+ |
+ |Данные = ""name=val&encodethis%3D%26""
+ | + ""&name="" + ТекстовыеДанныеФайла_1
+ | + ""&"" + ТекстовыеДанныеФайла_2;
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьМножественноеИспользованиеUrl() Экспорт
+
+ КонсольнаяКоманда = "curl http://example1.com \
+ | http://example2.com \
+ | --url http://example3.com \
+ | --url http://example4.com";
+
+ ПрограммныйКод = "// Запрос 1. http://example1.com
+ |Результат = КоннекторHTTP.Get(""http://example1.com"");
+ |
+ |// Запрос 2. http://example2.com
+ |Результат = КоннекторHTTP.Get(""http://example2.com"");
+ |
+ |// Запрос 3. http://example3.com
+ |Результат = КоннекторHTTP.Get(""http://example3.com"");
+ |
+ |// Запрос 4. http://example4.com
+ |Результат = КоннекторHTTP.Get(""http://example4.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапроса() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --get \
+ | -d 'param1=value' \
+ | --data 'param2=value2' \
+ | --data @path-to-file";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com?param1=value¶m2=value2&"" + ТекстовыеДанныеФайла_1);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапросаИзФайла() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --get \
+ | --data @path-to-file";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьВставкуДанныхВСтрокуЗапроса() Экспорт
+
+ КонсольнаяКоманда = "curl 'http://example.com?param3=value3#page-1' \
+ | --get \
+ | -d 'param1=value' \
+ | --data 'param2=value2' \
+ | --data @path-to-file";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
+ |
+ |URL = ""http://example.com?param3=value3¶m1=value¶m2=value2""
+ | + ""&"" + ТекстовыеДанныеФайла_1
+ | + ""#page-1"";
+ |
+ |Результат = КоннекторHTTP.Get(URL);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьHTTPМетодHEAD() Экспорт
+
+ КонсольнаяКоманда = "
+ |curl http://example1.com --head
+ |curl http://example2.com -X HEAD";
+
+ ПрограммныйКод = "//////////////////////////////////////////////
+ |// Команда #1.
+ |
+ |Результат = КоннекторHTTP.Head(""http://example1.com"");
+ |
+ |//////////////////////////////////////////////
+ |// Команда #2.
+ |
+ |Результат = КоннекторHTTP.Head(""http://example2.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьHTTPМетодOPTIONS() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com -X OPTIONS";
+
+ ПрограммныйКод = "Результат = КоннекторHTTP.Options(""http://example.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьОбработкуНесколькихКоманд() Экспорт
+
+ КонсольнаяКоманда = "curl http://example1.com & curl http://example2.com";
+
+ ПрограммныйКод = "//////////////////////////////////////////////
+ |// Команда #1.
+ |
+ |Результат = КоннекторHTTP.Get(""http://example1.com"");
+ |
+ |//////////////////////////////////////////////
+ |// Команда #2.
+ |
+ |Результат = КоннекторHTTP.Get(""http://example2.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьОтсутствиеИспользованияЗащищенногоСоединения() Экспорт
+
+ КонсольнаяКоманда = "curl 'http://example.com'";
+
+ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаСПаролем() Экспорт
+
+ КонсольнаяКоманда = "curl 'https://example.com' -E certfile.pem:secret";
+
+ ПрограммныйКод = "ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""КлиентскийСертификатSSL"", Новый СертификатКлиентаФайл(""certfile.pem"", ""secret""));
+ |
+ |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаБезПароля() Экспорт
+
+ КонсольнаяКоманда = "curl 'https://example.com' --cert certfile.pem";
+
+ ПрограммныйКод = "ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""КлиентскийСертификатSSL"", Новый СертификатКлиентаФайл(""certfile.pem""));
+ |
+ |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаИСертификатыУЦИзФайла() Экспорт
+
+ КонсольнаяКоманда = "curl 'https://example.com' --cert certfile.pem --cacert CA-file.txt";
+
+ ПрограммныйКод = "ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""ПроверятьSSL"", Новый СертификатыУдостоверяющихЦентровФайл(""CA-file.txt""));
+ |ДополнительныеПараметры.Вставить(""КлиентскийСертификатSSL"", Новый СертификатКлиентаФайл(""certfile.pem""));
+ |
+ |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуПараметровЗапроса() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --url-query name=val \
+ | --url-query '=encodethis=&' \
+ | --url-query name@file \
+ | --url-query @fileonly \
+ | --url-query '+name=%20foo' \
+ | --url-query +@not-a-file";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
+ |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.КодировкаURL);
+ |
+ |URL = ""http://example.com?name=val&encodethis%3D%26&name=%20foo&@not-a-file""
+ | + ""&name="" + ТекстовыеДанныеФайла_1
+ | + ""&"" + ТекстовыеДанныеФайла_2;
+ |
+ |Результат = КоннекторHTTP.Get(URL);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуПараметровЗапросаТолькоИзФайла() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com --url-query @fileonly";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""fileonly"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуПараметровЗапросаИФайла() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --url-query name=val \
+ | --data @path-to-file";
+
+ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """");
+ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """");
+ |
+ |ПараметрыЗапроса = Новый Соответствие();
+ |ПараметрыЗапроса.Вставить(""name"", ""val"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""ПараметрыЗапроса"", ПараметрыЗапроса);
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", ТекстовыеДанныеФайла_1, ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПрокси() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com --proxy http://proxy.example:1088";
+
+ ПрограммныйКод = "Прокси = Новый ИнтернетПрокси();
+ |Прокси.Установить(""http"", ""proxy.example"", 1088, , , Ложь);
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Прокси"", Прокси);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИнициализациюПроксиТолькоОдинРаз() Экспорт
+
+ КонсольнаяКоманда = "curl http://example1.com http://example2.com --proxy http://proxy.example:1088";
+
+ ПрограммныйКод = "Прокси = Новый ИнтернетПрокси();
+ |Прокси.Установить(""http"", ""proxy.example"", 1088, , , Ложь);
+ |
+ |// Запрос 1. http://example1.com
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Прокси"", Прокси);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example1.com"", , ДополнительныеПараметры);
+ |
+ |// Запрос 2. http://example2.com
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Прокси"", Прокси);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example2.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьАутентификациюПроксиBasic() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --proxy http://proxy.example \
+ | --proxy-user user:secret";
+
+ ПрограммныйКод = "Прокси = Новый ИнтернетПрокси();
+ |Прокси.Установить(""http"", ""proxy.example"", 1080, ""user"", ""secret"", Ложь);
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Прокси"", Прокси);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьАутентификациюПроксиNTLM() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com \
+ | --proxy http://proxy.example \
+ | --proxy-ntlm";
+
+ ПрограммныйКод = "Прокси = Новый ИнтернетПрокси();
+ |Прокси.Установить(""http"", ""proxy.example"", 1080);
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Прокси"", Прокси);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьОшибкуПроксиПротоколНеПоддерживается() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ --proxy socks5h://proxy.example";
+
+ Ошибки = Неопределено;
+
+ Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
+
+ Ожидаем.Что(Результат).Не_().Заполнено();
+ Ожидаем.Что(Ошибки).Заполнено();
+ Ожидаем.Что(Ошибки[0].Текст).Равно("Прокси протокол socks5h не поддерживается");
+ Ожидаем.Что(Ошибки[0].Критичная).ЭтоИстина();
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьТаймаут() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ --max-time 20 --connect-timeout 5.5";
+
+ ПрограммныйКод = "ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Таймаут"", 25.5);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьОтсутствиеТаймаутаЕслиНеУстановленыОбаТаймаута() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ --max-time 20 --connect-timeout 0";
+
+ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуJsonИзФайлов() Экспорт
+
+ КонсольнаяКоманда = "curl 'http://example.com' --json @path-to-file1 --json @path-to-file2";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""Content-Type"", ""application/json"");
+ |Заголовки.Вставить(""Accept"", ""application/json"");
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2"");
+ |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать();
+ |
+ |Данные = ТекстовыеДанныеФайла_1
+ | + ТекстовыеДанныеФайла_2;
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", Данные, ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуJsonИзСтроки() Экспорт
+
+ КонсольнаяКоманда = "curl 'http://example.com' --json '{""drink"": ""coffe""}'";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""Content-Type"", ""application/json"");
+ |Заголовки.Вставить(""Accept"", ""application/json"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуJsonИзНесколькихСтрок() Экспорт
+
+ КонсольнаяКоманда = "curl 'http://example.com' \
+ | --json '{""drink"":' \
+ | --json ' ""coffe""}'";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""Content-Type"", ""application/json"");
+ |Заголовки.Вставить(""Accept"", ""application/json"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПередачуJsonИзСтрокиИФайла() Экспорт
+
+ КонсольнаяКоманда = "curl 'http://example.com' \
+ | --json '{""drink"": ""coffe"", ""size"": ' \
+ | --json @path-to-file";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""Content-Type"", ""application/json"");
+ |Заголовки.Вставить(""Accept"", ""application/json"");
+ |
+ |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file"");
+ |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать();
+ |
+ |Данные = ""{""""drink"""": """"coffe"""", """"size"""": ""
+ | + ТекстовыеДанныеФайла_1;
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Post(""http://example.com"", Данные, ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьUserAgent() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ -A 'Agent 007'";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""User-Agent"", ""Agent 007"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПробелыВUserAgent() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ -A ' '";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""User-Agent"", """");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПустойUserAgent() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ -A ''";
+
+ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьОтсутстивиеЗамещенияUserAgent() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ -H 'User-Agent: Agent 007' -A 'Agent 001'";
+
+ ПрограммныйКод = "Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""User-Agent"", ""Agent 007"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьИспользованиеОпцийТолькоСвоейКоманды() Экспорт
+
+ КонсольнаяКоманда = "curl http://example1.com -H 'accept: text/html'
+ |curl http://example2.com -d 'key=value'
+ |curl http://example3.com";
+
+ ПрограммныйКод = "//////////////////////////////////////////////
+ |// Команда #1.
+ |
+ |Заголовки = Новый Соответствие();
+ |Заголовки.Вставить(""accept"", ""text/html"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example1.com"", , ДополнительныеПараметры);
+ |
+ |//////////////////////////////////////////////
+ |// Команда #2.
+ |
+ |Данные = Новый Соответствие();
+ |Данные.Вставить(""key"", ""value"");
+ |
+ |Результат = КоннекторHTTP.Post(""http://example2.com"", Данные);
+ |
+ |//////////////////////////////////////////////
+ |// Команда #3.
+ |
+ |Результат = КоннекторHTTP.Get(""http://example3.com"");";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьBearerToken() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ --oauth2-bearer 'mF_9.B5f-4.1JqM'";
+
+ ПрограммныйКод = "Аутентификация = Новый Структура(""Токен, Тип"", ""mF_9.B5f-4.1JqM"", ""Bearer"");
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""Аутентификация"", Аутентификация);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПроверитьИспользованиеПеренаправлений() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ -L
+ |curl http://example.com/ --location
+ |curl http://example.com/ --no-location
+ |curl http://example.com/ --no-location --location";
+
+ ПрограммныйКод = "//////////////////////////////////////////////
+ |// Команда #1.
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"");
+ |
+ |//////////////////////////////////////////////
+ |// Команда #2.
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"");
+ |
+ |//////////////////////////////////////////////
+ |// Команда #3.
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""РазрешитьПеренаправление"", Ложь);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);
+ |
+ |//////////////////////////////////////////////
+ |// Команда #4.
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""РазрешитьПеренаправление"", Ложь);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПроверитьПовторныеПопытки() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ --retry 5
+ |curl http://example.com/ --retry 0
+ |curl http://example.com/ --retry 5 --retry-max-time 0
+ |curl http://example.com/ --retry 5 --retry-max-time 30
+ |curl http://example.com/ --retry-max-time 30";
+
+ ПрограммныйКод = "//////////////////////////////////////////////
+ |// Команда #1.
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""МаксимальноеКоличествоПовторов"", 5);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);
+ |
+ |//////////////////////////////////////////////
+ |// Команда #2.
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"");
+ |
+ |//////////////////////////////////////////////
+ |// Команда #3.
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""МаксимальноеКоличествоПовторов"", 5);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);
+ |
+ |//////////////////////////////////////////////
+ |// Команда #4.
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""МаксимальноеКоличествоПовторов"", 5);
+ |ДополнительныеПараметры.Вставить(""МаксимальноеВремяПовторов"", 30);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);
+ |
+ |//////////////////////////////////////////////
+ |// Команда #5.
+ |
+ |ДополнительныеПараметры = Новый Структура();
+ |ДополнительныеПараметры.Вставить(""МаксимальноеВремяПовторов"", 30);
+ |
+ |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";
+
+ ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод);
+
+КонецПроцедуры
+
+&Тест
+Процедура ТестДолжен_ПроверитьПроверитьПередачуДанныхMultipart() Экспорт
+
+ КонсольнаяКоманда = "curl http://example.com/ -F name=John -F shoesize=11
+ |curl http://example.com/ -F profile=@portrait.jpg
+ |curl http://example.com/ -F profile=@portrait.jpg --form brief=@file.pdf
+ |curl http://example.com/ -F file=@part1 --form file=@part2
+ |curl http://example.com/ -F name=John -F profile=@portrait.jpg
+ |curl http://example.com/ -F story=