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 @@ +
@@ -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=