From a83f902c8911b29b94861e2a0b425ebd68641754 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 16:59:28 +0300 Subject: [PATCH 01/29] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=9A=D0=BE=D0=BD=D0=BD=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80HTTP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib.config | 5 +- ...0\232\320\276\320\264\320\2601\320\241.os" | 199 ++-- ...65\320\272\321\202\320\276\321\200HTTP.os" | 763 ++++++++++++++ ...74\320\260\320\275\320\264\321\213CURL.os" | 55 +- ...20\276\320\232\320\276\320\264\320\260.os" | 33 +- ...20\277\321\200\320\276\321\201\320\260.os" | 71 +- ...260\321\200\321\201\320\265\321\200URL.os" | 6 +- ...21\207\320\265\320\275\320\270\321\217.os" | 14 + ...20\270\320\232\320\276\320\264\320\260.os" | 133 ++- ...\320\276\320\264\320\2601\320\241_test.os" | 35 +- ...0\272\321\202\320\276\321\200HTTP_test.os" | 992 ++++++++++++++++++ ...41\320\260\320\271\321\202\320\260Curl.os" | 7 +- 12 files changed, 2125 insertions(+), 188 deletions(-) create mode 100644 "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" create mode 100644 "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" 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/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..8ee75d5 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,8 +36,9 @@ // Строка - Программный код Функция Получить(Описание, Ошибки = Неопределено) Экспорт + МаксимальнаяДлинаАдресаВКомментарии = 100; + ОписаниеЗапроса = Описание; - ИспользуетсяПрокси = Ложь; ВызванМетодПоТекущемуURL = Ложь; ПрочитанныеФайлы.Очистить(); @@ -70,7 +70,9 @@ Конструктор.ДобавитьПустуюСтроку(); Если КоличествоURL > 1 Тогда - Конструктор.ДобавитьКомментарий("Запрос %1. %2", НомерЗапроса, Лев(ОписаниеРесурса.URL, 100)); + Конструктор.ДобавитьКомментарий("Запрос %1. %2", + НомерЗапроса, + Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)); КонецЕсли; Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда @@ -100,6 +102,65 @@ КонецФункции +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПоддерживаемыеОпции() Экспорт + + ПоддерживаемыеОпции = "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"; + + Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь); + +КонецФункции + Функция ПоддерживаемыеПротоколы() Экспорт Протоколы = Новый Массив(); Протоколы.Добавить(ПротоколыURL.HTTP); @@ -124,7 +185,6 @@ ИмяПараметраТелоЗапросаСтрока = "ТелоЗапроса"; ПрочитанныеФайлы = Новый Массив(); - ИспользуетсяПрокси = Ложь; ВызванМетодПоТекущемуURL = Ложь; КонецПроцедуры @@ -206,9 +266,7 @@ Процедура ВывестиИнициализациюПрокси() - ИспользуетсяПрокси = ЗначениеЗаполнено(ОписаниеЗапроса.ПроксиСервер); - - Если Не ИспользуетсяПрокси Тогда + Если Не ОписаниеЗапроса.ИспользуетсяПрокси() Тогда Возврат; КонецЕсли; @@ -258,7 +316,7 @@ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL))); ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя)); ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)); - ПараметрыФункции.Добавить(?(ИспользуетсяПрокси, ИмяПараметраПрокси, "")); + ПараметрыФункции.Добавить(?(ОписаниеЗапроса.ИспользуетсяПрокси(), ИмяПараметраПрокси, "")); ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут)); ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, "")); @@ -287,7 +345,7 @@ ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL))); ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя)); ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)); - ПараметрыФункции.Добавить(?(ИспользуетсяПрокси, ИмяПараметраПрокси, "")); + ПараметрыФункции.Добавить(?(ОписаниеЗапроса.ИспользуетсяПрокси(), ИмяПараметраПрокси, "")); ПараметрыФункции.Добавить(?(ОписаниеЗапроса.FTPПассивныйРежимСоединения, Истина, "")); ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут)); ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, "")); @@ -300,7 +358,7 @@ Процедура ВывестиЗаголовки() - Если ОписаниеЗапроса.Заголовки.Количество() = 0 Тогда + Если Не ОписаниеЗапроса.Заголовки.Количество() Тогда Возврат; КонецЕсли; @@ -322,8 +380,13 @@ ПараметрыФункции = Новый Массив; - АдресРесурсаКод = ПолучитьКодСборкиАдресаРесурса(СтруктураURL); - Если СтрЧислоСтрок(АдресРесурсаКод) > 1 Тогда + АдресРесурсаКод = УниверсальныеБлокиКода.СборкаАдресаРесурса(СтруктураURL, + ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, + ПрочитанныеФайлы); + + Если ПустаяСтрока(АдресРесурсаКод) Тогда + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку("/")); + ИначеЕсли СтрЧислоСтрок(АдресРесурсаКод) > 1 Тогда Конструктор .ДобавитьПустуюСтроку() .ДобавитьСтроку("АдресРесурса = %1;", АдресРесурсаКод); @@ -342,70 +405,6 @@ КонецПроцедуры -Функция ПолучитьКодСборкиАдресаРесурса(СтруктураURL) - - Кавычка = """"; - РазделительПараметровЗапроса = "&"; - КонкатенацияСПереносомСтрокиИАмперсандом = " - | + ""&"" + "; - КонкатенацияСПереносомСтроки = " - | + "; - - КавычкаЗакрыта = Ложь; - Код = Кавычка + СтруктураURL.Путь; - СтрокаЗапроса = СобратьИсходнуюСтрокуЗапроса(СтруктураURL); - - Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл - Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда - СтрокаЗапроса = СтрокаЗапроса - + ?(ЗначениеЗаполнено(СтрокаЗапроса), РазделительПараметровЗапроса, "") - + ПередаваемыйТекст.Значение; - КонецЕсли; - КонецЦикла; - - КодПрочитанныхФайлов = ""; - Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл - Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда - КодПрочитанныхФайлов = КодПрочитанныхФайлов - + ?(КодПрочитанныхФайлов = "", "", КонкатенацияСПереносомСтрокиИАмперсандом) - + ПрочитанныйФайл.ИмяПеременной; - КонецЕсли; - КонецЦикла; - - Если ЗначениеЗаполнено(СтрокаЗапроса) - Или ЗначениеЗаполнено(КодПрочитанныхФайлов) Тогда - Код = Код + "?"; - КонецЕсли; - - Код = Код + СтрокаЗапроса; - - Если ЗначениеЗаполнено(КодПрочитанныхФайлов) Тогда - Код = Код + Кавычка - + ?(ЗначениеЗаполнено(СтрокаЗапроса), - КонкатенацияСПереносомСтрокиИАмперсандом, - КонкатенацияСПереносомСтроки) - + КодПрочитанныхФайлов; - КавычкаЗакрыта = Истина; - КонецЕсли; - - Если ЗначениеЗаполнено(СтруктураURL.Фрагмент) Тогда - Фрагмент = "#" + СтруктураURL.Фрагмент; - Если КавычкаЗакрыта Тогда - Код = Код + " - | + " + Конструктор.ПараметрВСтроку(Фрагмент); - Иначе - Код = Код + Фрагмент; - КонецЕсли; - КонецЕсли; - - Если Не КавычкаЗакрыта Тогда - Код = Код + Кавычка; - КонецЕсли; - - Возврат Код; - -КонецФункции - Процедура ДобавитьЧтениеФайлов() ТребуетсяЧтениеФайловТелаЗапроса = Не МетодУстановкиТелаЗапроса = "ИзФайла"; @@ -440,7 +439,8 @@ Процедура ДобавитьДанныеЗапроса() ТелоЗапросаСтрока = ""; - ТелоЗапроса = УниверсальныеБлокиКода.СборкаТелаЗапроса( + ТелоЗапроса = УниверсальныеБлокиКода.СборкаДанныхЗапросаВСтроку( + НазначенияПередаваемыхДанных.ТелоЗапроса, ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, ПрочитанныеФайлы); @@ -490,7 +490,7 @@ СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда - СтруктураURL.Путь = ДобавитьИмяФайлаКURL(ПередаваемыйФайл, СтруктураURL.Путь); + СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ИмяФайла, СтруктураURL.Путь); КонецЕсли; ВывестиHTTPЗапрос(СтруктураURL); @@ -619,9 +619,10 @@ Продолжить; КонецЕсли; - АдресРесурса = СтруктураURL.Путь; Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда - АдресРесурса = ДобавитьИмяФайлаКURL(ПередаваемыйФайл, АдресРесурса); + АдресРесурса = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ИмяФайла, СтруктураURL.Путь); + Иначе + АдресРесурса = СтруктураURL.Путь; КонецЕсли; ПараметрыФункции = Новый Массив; @@ -658,36 +659,12 @@ КонецПроцедуры -Функция СобратьИсходнуюСтрокуЗапроса(СтруктураURL) - - СтрокаЗапроса = ""; - - Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл - СтрокаЗапроса = СтрокаЗапроса - + ?(СтрокаЗапроса = "", "", "&") - + Параметр.Ключ - + "=" - + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.URLВКодировкеURL); - КонецЦикла; - - Возврат СтрокаЗапроса; - -КонецФункции - Функция ИспользуетсяЗащищенноеСоединение(СтруктураURL) Возврат СтруктураURL.Схема = ПротоколыURL.HTTPS Или СтруктураURL.Схема = ПротоколыURL.FTPS Или ЗначениеЗаполнено(ОписаниеЗапроса.ИмяФайлаСертификатаКлиента); КонецФункции -Функция ДобавитьИмяФайлаКURL(ПередаваемыйФайл, URL) - Файл = Новый Файл(ПередаваемыйФайл.ИмяФайла); - Если Прав(URL, 1) = "/" Тогда - Возврат URL + Файл.Имя; - КонецЕсли; - Возврат URL; -КонецФункции - Функция ПередаваемыйФайлПрочитан(ПередаваемыйФайл) Если Не ПередаваемыйФайл.ПрочитатьСодержимое Тогда 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..bccc2ad --- /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,763 @@ +#Использовать "../../internal" + +Перем Конструктор; // см. КонструкторПрограммногоКода +Перем ИсходящиеОшибки; // Массив из Структура: + // * Текст - Строка - Текст ошибки + // * КритичнаяОшибка - Булево - Признак критичиной ошибки +Перем ОписаниеЗапроса; // см. ОписаниеЗапроса + +Перем Состояние; // см. НовоеСостояние +Перем ПрочитанныеФайлы; // Массив из Структура: + // - ПередаваемыйФайл - см. ПередаваемыйФайл + // - ИмяПеременной - Строка +Перем ДанныеЗапросаСборка; // Строка +Перем URLСборка; // Строка + +Перем ИмяПараметраЗаголовки; // Строка +Перем ИмяПараметраАутентификация; // Строка +Перем ИмяПараметраПрокси; // Строка +Перем ИмяПараметраДополнительныеПараметры; // Строка +Перем ИмяПараметраДанныеЗапроса; // Строка +Перем ИмяПараметраПараметрыЗапроса; // Строка +Перем ИмяПараметраURL; // Строка + +#Область ПрограммныйИнтерфейс + +// Генерирует программный код 1С из переданного описания запроса +// +// Параметры: +// Описание - см. ОписаниеЗапроса - Описание запроса +// Ошибки - Неопределено - Выходной параметр. Передает обнаруженные при конвертации ошибки: +// Массив из Структура: +// * Текст - Строка - Текст ошибки +// * Критичная - Булево - Признак критичиной ошибки +// +// Возвращаемое значение: +// Строка - Программный код +Функция Получить(Описание, Ошибки = Неопределено) Экспорт + + Если Ошибки = Неопределено Тогда + Ошибки = Новый Массив(); + КонецЕсли; + + ОписаниеЗапроса = Описание; + Состояние = НовоеСостояние(); + + ПрочитанныеФайлы.Очистить(); + ИсходящиеОшибки = Ошибки; + Конструктор = Новый КонструкторПрограммногоКода(); + + ДобавитьЗаголовки(); + ДобавитьАутентификацию(); + ДобавитьПрокси(); + ДобавитьЧтениеФайлов(); + ДобавитьДанныеЗапроса(); + ДобавитьПараметрыЗапроса(); + ДобавитьЗапросы(); + + Возврат Конструктор.ПолучитьРезультат(); + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПоддерживаемыеОпции() Экспорт + + ПоддерживаемыеОпции = "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"; + + Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь); + +КонецФункции + +Функция ПоддерживаемыеПротоколы() Экспорт + Протоколы = Новый Массив(); + Протоколы.Добавить(ПротоколыURL.HTTP); + Протоколы.Добавить(ПротоколыURL.HTTPS); + Возврат Протоколы; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПриСозданииОбъекта() + + ИмяПараметраЗаголовки = "Заголовки"; + ИмяПараметраАутентификация = "Аутентификация"; + ИмяПараметраПрокси = "Прокси"; + ИмяПараметраДополнительныеПараметры = "ДополнительныеПараметры"; + ИмяПараметраДанныеЗапроса = "Данные"; + ИмяПараметраПараметрыЗапроса = "ПараметрыЗапроса"; + ИмяПараметраURL = "URL"; + + ПрочитанныеФайлы = Новый Массив(); + +КонецПроцедуры + +Процедура ДобавитьЗапросы() + + МаксимальнаяДлинаАдресаВКомментарии = 100; + + КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество(); + НомерЗапроса = 0; + + Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл + + НомерЗапроса = НомерЗапроса + 1; + СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); + Состояние.ВызванМетодПоТекущемуURL = Ложь; + + Если Не ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда + ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); + КонецЕсли; + + Конструктор.ДобавитьПустуюСтроку(); + + Если КоличествоURL > 1 Тогда + Конструктор.ДобавитьКомментарий("Запрос %1. %2", + НомерЗапроса, + Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)); + КонецЕсли; + + ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса); + + Если Не Состояние.ВызванМетодПоТекущемуURL Тогда + ДобавитьВызовМетода(ОписаниеРесурса); + КонецЕсли; + + Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда + Конструктор.Очистить(); + Возврат; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьЗаголовки() + + Заголовки = ПередаваемыеЗаголовки(); + Если Заголовки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Состояние.ЕстьЗаголовки = Истина; + + Конструктор.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки); + + Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл + + Если Не ПередаватьЗаголовок(Заголовок) Тогда + Продолжить; + КонецЕсли; + + ПараметрыФункции = Новый Массив(); + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ)); + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение)); + + Конструктор.ДобавитьСтроку("%1.Вставить(%2);", + ИмяПараметраЗаголовки, + Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + КонецЦикла; + +КонецПроцедуры + +Функция ПередаваемыеЗаголовки() + Заголовки = Новый Соответствие(); + Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл + Если ПередаватьЗаголовок(Заголовок) Тогда + Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение); + КонецЕсли; + КонецЦикла; + Возврат Заголовки; +КонецФункции + +Функция ПередаватьЗаголовок(Заголовок) + + Имя = НРег(Заголовок.Ключ); + Значение = НРег(Заголовок.Значение); + + Если Имя = "content-type" Тогда + Если Состояние.ПереданоТелоЗапроса + И Значение = "application/x-www-form-urlencoded" Тогда + Возврат Ложь; + КонецЕсли; + ИначеЕсли Имя = "authorization" И СтрНачинаетсяС(Значение, "bearer ") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Процедура ДобавитьЧтениеФайлов() + + ФайлыДляЧтения = Новый Массив(); + Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл + + Если Не (ПередаваемыйФайл.ПрочитатьСодержимое + Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда + Продолжить; + КонецЕсли; + + ФайлыДляЧтения.Добавить(ПередаваемыйФайл); + + КонецЦикла; + + Код = УниверсальныеБлокиКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы); + + Если Не ПустаяСтрока(Код) Тогда + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку(Код); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьДанныеЗапроса() + + ДанныеЗапросаСборка = ""; + + Если Не Состояние.ПереданоТелоЗапроса Тогда + Возврат; + КонецЕсли; + + НазначениеДанных = НазначенияПередаваемыхДанных.ТелоЗапроса; + + Если ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда + + ДобавитьТекстовыеДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраДанныеЗапроса); + ДанныеЗапросаСборка = ИмяПараметраДанныеЗапроса; + + Иначе + + ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметраДанныеЗапроса, ДанныеЗапросаСборка); + + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьПараметрыЗапроса() + + НазначениеДанных = НазначенияПередаваемыхДанных.СтрокаЗапроса; + + Если Не Состояние.ПереданаСтрокаЗапроса + Или Не ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда + Возврат; + КонецЕсли; + + ДобавитьТекстовыеДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраПараметрыЗапроса); + +КонецПроцедуры + +Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСоответствие(Назначение, ИмяПараметра) + + РазделительКлючаИЗначения = "="; + + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметра); + + Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл + + Если Не ПередаваемыйТекст.Назначение = Назначение Тогда + Продолжить; + КонецЕсли; + + ИндексРазделителя = СтрНайти(ПередаваемыйТекст.Значение, РазделительКлючаИЗначения); + + Если ИндексРазделителя > 0 Тогда + Ключ = Сред(ПередаваемыйТекст.Значение, 1, ИндексРазделителя - 1); + Значение = Сред(ПередаваемыйТекст.Значение, ИндексРазделителя + 1); + Иначе + Ключ = ПередаваемыйТекст.Значение; + Значение = Неопределено; + КонецЕсли; + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Конструктор.ПараметрВСтроку(Ключ)); + ПараметрыМетода.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Значение)); + + Конструктор.ДобавитьСтроку("%1.Вставить(%2);", + ИмяПараметра, + Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода)); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметра, РезультатСборка) + + Сборка = УниверсальныеБлокиКода.СборкаДанныхЗапросаВСтроку( + НазначениеДанных, + ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, + ПрочитанныеФайлы); + + Если ЗначениеЗаполнено(Сборка) Тогда + Если СтрЧислоСтрок(Сборка) = 1 Тогда + РезультатСборка = Сборка; + Иначе + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = %2;", ИмяПараметра, Сборка); + + РезультатСборка = ИмяПараметра; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса) + + ДлинаИмениФайлаВКомментарии = 100; + + ВсеФайлы = Новый Массив(); + ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеЗапроса.Файлы); + ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеРесурса.Файлы); + + ПередаваемыеФайлы = Новый Массив(); + Для Каждого ПередаваемыйФайл Из ВсеФайлы Цикл + + Если ПередаваемыйФайл.ОтправлятьОтдельно + И Не ПередаваемыйФайл.ПрочитатьСодержимое + И ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда + ПередаваемыеФайлы.Добавить(ПередаваемыйФайл); + КонецЕсли; + + КонецЦикла; + + КоличествоФайлов = ПередаваемыеФайлы.Количество(); + НомерФайла = 0; + Для Каждого ПередаваемыйФайл Из ПередаваемыеФайлы Цикл + + НомерФайла = НомерФайла + 1; + + Если КоличествоФайлов > 1 Тогда + ИмяФайла = Лев(ПередаваемыйФайл.ИмяФайла, ДлинаИмениФайлаВКомментарии); + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьКомментарий("Передача файла %1. %2", НомерФайла, ИмяФайла); + КонецЕсли; + + СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); + Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда + СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ИмяФайла, СтруктураURL.Путь); + КонецЕсли; + + Конструктор.ДобавитьСтроку("%1 = Новый ДвоичныеДанные(%2);", + ИмяПараметраДанныеЗапроса, + Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла)); + + ДобавитьВызовМетода(ОписаниеРесурса, СтруктураURL, ИмяПараметраДанныеЗапроса); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьАутентификацию() + + ДобавитьАутентификациюBasic(); + ДобавитьАутентификациюBearer(); + +КонецПроцедуры + +Процедура ДобавитьАутентификациюBasic() + + Если Не Состояние.ТипАутентификации = ТипАутентификацииBasic() Тогда + Возврат; + КонецЕсли; + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя)); + ПараметрыМетода.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)); + + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = КоннекторHTTP.НоваяАутентификацияBasic(%2);", + ИмяПараметраАутентификация, + Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода)); + +КонецПроцедуры + +Процедура ДобавитьАутентификациюBearer() + + Если Не Состояние.ТипАутентификации = ТипАутентификацииBearer() Тогда + Возврат; + КонецЕсли; + + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = КоннекторHTTP.НоваяАутентификацияBearer(%2);", + ИмяПараметраАутентификация, + Конструктор.ПараметрВСтроку(ПолучитьТокенBearer())); + +КонецПроцедуры + +Процедура ДобавитьПрокси() + + Если Не Состояние.ИспользуетсяПрокси Тогда + Возврат; + КонецЕсли; + + ДопустимыеПротоколыПрокси = Новый Массив(); + ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTP); + ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTPS); + ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTP); + ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTPS); + + Если ДопустимыеПротоколыПрокси.Найти(ОписаниеЗапроса.ПроксиПротокол) = Неопределено Тогда + ТекстОшибки = СтрШаблон("Прокси протокол %1 не поддерживается", ОписаниеЗапроса.ПроксиПротокол); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); + Возврат; + КонецЕсли; + + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметраПрокси); + + ИспользоватьАутентификациюОС = ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM; + + ПараметрыФункции = Новый Массив; + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиПротокол)); + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиСервер)); + ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПорт)); + ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПользователь)); + ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПароль)); + ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина + + Конструктор.ДобавитьСтроку("%1.Установить(%2);", + ИмяПараметраПрокси, + Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + +КонецПроцедуры + +Процедура ДобавитьВызовМетода(ОписаниеРесурса, Знач Структура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);", + ИмяПараметраДополнительныеПараметры, + ДанныеЗапроса); + КонецЕсли; + +КонецПроцедуры + +Функция ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(Метод) + Возврат Метод = "POST" Или Метод = "PUT" Или Метод = "PATCH" Или Метод = "DELETE"; +КонецФункции + +Функция ВозможноПередатьПараметрыЗапросаВПараметрыФункцииВызоваМетода(Метод) + Возврат Метод = "GET"; +КонецФункции + +Функция ВозможнаПередачаДанныхЧерезСоответствие(Назначение) + + РазделительКлючаИЗначения = "="; + + Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл + Если Не ПередаваемыйТекст.Назначение = Назначение Тогда + Продолжить; + КонецЕсли; + + РазделительОтличенОтАмперсанда = Не ПередаваемыйТекст.РазделительТелаЗапроса = "&"; + ОтсутствуетИмяПараметра = Лев(ПередаваемыйТекст.Значение, 1) = РазделительКлючаИЗначения; + + Если РазделительОтличенОтАмперсанда Или ОтсутствуетИмяПараметра Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл + Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = Назначение Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +Функция ПолучитьТипАутентификации() + + Если ЗначениеЗаполнено(ОписаниеЗапроса.ИмяПользователя) Тогда + Возврат ТипАутентификацииBasic(); + ИначеЕсли Не ПолучитьТокенBearer() = Неопределено Тогда + Возврат ТипАутентификацииBearer(); + КонецЕсли; + +КонецФункции + +Функция ТипАутентификацииBasic() + Возврат "basic"; +КонецФункции + +Функция ТипАутентификацииBearer() + Возврат "bearer"; +КонецФункции + +Функция ПолучитьТокенBearer() + + ЗначениеAuthorization = ОписаниеЗапроса.ЗначениеЗаголовка("Authorization"); + Подстрока = "bearer "; + + Если СтрНачинаетсяС(НРег(ЗначениеAuthorization), Подстрока) Тогда + Возврат СокрЛП(Сред(ЗначениеAuthorization, СтрДлина(Подстрока) + 1)); + КонецЕсли; + +КонецФункции + +Функция НовоеСостояние() + Результат = Новый Структура(); + + Результат.Вставить("ИспользуетсяПрокси", ОписаниеЗапроса.ИспользуетсяПрокси()); + Результат.Вставить("ПереданоТелоЗапроса", ОписаниеЗапроса.ПереданоТелоЗапроса()); + Результат.Вставить("ПереданаСтрокаЗапроса", ОписаниеЗапроса.ПереданаСтрокаЗапроса()); + Результат.Вставить("ЕстьЗаголовки", Ложь); + Результат.Вставить("ЕстьДополнительныеПараметры", Ложь); + Результат.Вставить("ВызванМетодПоТекущему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..71e2779 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,6 +5,7 @@ Перем ИсходящиеОшибки; // Массив из Структура: // * Текст - Строка - Текст ошибки // * КритичнаяОшибка - Булево - Признак критичиной ошибки +Перем Генератор; // Объект генератора программного кода Перем КонсольноеПриложение; // см. КонсольноеПриложение Перем ОписаниеОпций; // Соответствие Перем КаталогСохраненияФайлов; // Строка @@ -85,18 +86,18 @@ // Получает поддерживаемые опции // // Возвращаемое значение: -// Соответствие +// Массив из Строка Функция ПоддерживаемыеОпции() Экспорт ПолучитьКонсольноеПриложение(); - ПоддерживаемыеОпции = Новый Соответствие(); + ПоддерживаемыеОпции = Новый Массив(); Для Каждого КлючЗначение Из ОписаниеОпций Цикл ИмяОпции = КлючЗначение.Ключ; Описание = КлючЗначение.Значение; Если Описание.Поддерживается Тогда - ПоддерживаемыеОпции.Вставить(ИмяОпции, Истина); + ПоддерживаемыеОпции.Добавить(ИмяОпции); КонецЕсли; КонецЦикла; @@ -300,7 +301,11 @@ Процедура ПрочитатьЗаголовки(Команда) - ОписаниеЗапроса.Заголовки = РазобратьЗаголовки(Команда); + Заголовки = РазобратьЗаголовки(Команда); + Для Каждого Заголовок Из Заголовки Цикл + ОписаниеЗапроса.ДобавитьЗаголовок(Заголовок.Ключ, Заголовок.Значение); + КонецЦикла; + ДополнитьЗаголовкиJson(Команда); ДополнитьЗаголовкиПриНаличииОпцииГруппыData(Команда); ДополнитьЗаголовокUserAgent(Команда); @@ -314,12 +319,12 @@ Возврат; КонецЕсли; - Если Не ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "Content-Type")) Тогда - ОписаниеЗапроса.Заголовки.Вставить("Content-Type", "application/json"); + Если Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Content-Type")) Тогда + ОписаниеЗапроса.ДобавитьЗаголовок("Content-Type", "application/json"); КонецЕсли; - Если Не ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "Accept")) Тогда - ОписаниеЗапроса.Заголовки.Вставить("Accept", "application/json"); + Если Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Accept")) Тогда + ОписаниеЗапроса.ДобавитьЗаголовок("Accept", "application/json"); КонецЕсли; КонецПроцедуры @@ -327,8 +332,8 @@ Процедура ДополнитьЗаголовкиПриНаличииОпцииГруппыData(Команда) Если ЕстьОпцииГруппыData(Команда) И ЗначениеОпции(Команда, "get") = Ложь - И Не ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "Content-Type")) Тогда - ОписаниеЗапроса.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); + И Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Content-Type")) Тогда + ОписаниеЗапроса.ДобавитьЗаголовок("Content-Type", "application/x-www-form-urlencoded"); КонецЕсли; КонецПроцедуры @@ -340,7 +345,7 @@ Возврат; КонецЕсли; - Если ЗначениеЗаполнено(ЗначениеЗаголовка(ОписаниеЗапроса.Заголовки, "User-Agent")) Тогда + Если ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("User-Agent")) Тогда Возврат; КонецЕсли; @@ -348,7 +353,7 @@ UserAgent = ""; КонецЕсли; - ОписаниеЗапроса.Заголовки.Вставить("User-Agent", UserAgent); + ОписаниеЗапроса.ДобавитьЗаголовок("User-Agent", UserAgent); КонецПроцедуры @@ -360,7 +365,7 @@ Возврат; КонецЕсли; - ОписаниеЗапроса.Заголовки.Вставить("Authorization", "Bearer " + Токен); + ОписаниеЗапроса.ДобавитьЗаголовок("Authorization", "Bearer " + Токен); КонецПроцедуры @@ -387,16 +392,6 @@ КонецФункции -Функция ЗначениеЗаголовка(Заголовки, Имя) - - Для Каждого КлючЗначение Из Заголовки Цикл - Если НРег(КлючЗначение.Ключ) = НРег(Имя) Тогда - Возврат КлючЗначение.Значение; - КонецЕсли; - КонецЦикла; - -КонецФункции - Процедура ПрочитатьПользователя(Команда) ПользовательИПароль = ЗначениеОпции(Команда, "u"); МассивПодстрок = СтрРазделить(ПользовательИПароль, ":"); @@ -1140,14 +1135,24 @@ Процедура ДополнитьОшибкиНеподдерживаемыеОпции(Команда) + ПоддерживаемыеОпцииГенератора = Новый Соответствие(); + + Для Каждого ИмяОпции Из Генератор.ПоддерживаемыеОпции() Цикл + Префикс = ?(СтрДлина(ИмяОпции) = 1, "-", "--"); + ПоддерживаемыеОпцииГенератора.Вставить(Префикс + ИмяОпции, Истина); + КонецЦикла; + ПроверенныеОпции = Новый Соответствие(); Для Каждого КлючЗначение Из ОписаниеОпций Цикл + Описание = КлючЗначение.Значение; - Если Описание.Поддерживается Тогда + Наименование = Описание.Наименования[0]; + + ПоддерживаетсяГенератором = ПоддерживаемыеОпцииГенератора[Наименование] = Истина; + Если Описание.Поддерживается И ПоддерживаетсяГенератором Тогда Продолжить; КонецЕсли; - Наименование = Описание.Наименования[0]; Если ПроверенныеОпции[Наименование] <> Неопределено Тогда Продолжить; КонецЕсли; 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..0611a11 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,13 +1,20 @@ -Перем Результат; +Перем Результат; // Строка -Процедура ПриСозданииОбъекта() - Результат = ""; -КонецПроцедуры +#Область ПрограммныйИнтерфейс Функция ПолучитьРезультат() Экспорт Возврат СокрЛП(Результат); КонецФункции +Функция Пустой() Экспорт + Возврат ПустаяСтрока(Результат); +КонецФункции + +Функция Очистить() Экспорт + Результат = ""; + Возврат ЭтотОбъект; +КонецФункции + Функция ДобавитьСтроку(Строка, Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено) Экспорт @@ -26,8 +33,10 @@ КонецФункции -Функция ДобавитьПустуюСтроку() Экспорт - Результат = Результат + Символы.ПС; +Функция ДобавитьПустуюСтроку(ТолькоПриОтсутствии = Истина) Экспорт + Если Прав(Результат, 1) <> Символы.ПС Или Не ТолькоПриОтсутствии Тогда + Результат = Результат + Символы.ПС; + КонецЕсли; Возврат ЭтотОбъект; КонецФункции @@ -90,6 +99,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..2692edd 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" @@ -27,6 +27,50 @@ // Максимальное время ожидания на попытку соединения к хосту Перем ТаймаутСоединения Экспорт; // Число +#Область ПрограммныйИнтерфейс + +Процедура ДобавитьАдресРесурса(URL, ИмяВыходногоФайла = "") Экспорт + ОписаниеРесурса = НовоеОписаниеРесурса(); + ОписаниеРесурса.URL = URL; + ОписаниеРесурса.ИмяВыходногоФайла = ИмяВыходногоФайла; + АдресаРесурсов.Добавить(ОписаниеРесурса); +КонецПроцедуры + +Процедура ДобавитьЗаголовок(Имя, Значение) Экспорт + Заголовки.Вставить(Имя, Значение); +КонецПроцедуры + +Функция ЗначениеЗаголовка(Имя) Экспорт + + Значение = Заголовки[Имя]; + Если Не Значение = Неопределено Тогда + Возврат Значение; + КонецЕсли; + + Для Каждого КлючИЗначение Из Заголовки Цикл + Если НРег(КлючИЗначение.Ключ) = НРег(Имя) Тогда + Возврат КлючИЗначение.Значение; + КонецЕсли; + КонецЦикла; + +КонецФункции + +Функция ИспользуетсяПрокси() Экспорт + Возврат ЗначениеЗаполнено(ПроксиСервер); +КонецФункции + +Функция ПереданоТелоЗапроса() Экспорт + Возврат ЕстьДанныеПоНазначению(НазначенияПередаваемыхДанных.ТелоЗапроса); +КонецФункции + +Функция ПереданаСтрокаЗапроса() Экспорт + Возврат ЕстьДанныеПоНазначению(НазначенияПередаваемыхДанных.СтрокаЗапроса); +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + Процедура ПриСозданииОбъекта() АдресаРесурсов = Новый Массив; Заголовки = Новый Соответствие(); @@ -50,12 +94,23 @@ FTPАдресОбратногоСоединения = ""; КонецПроцедуры -Процедура ДобавитьАдресРесурса(URL, ИмяВыходногоФайла = "") Экспорт - ОписаниеРесурса = НовоеОписаниеРесурса(); - ОписаниеРесурса.URL = URL; - ОписаниеРесурса.ИмяВыходногоФайла = ИмяВыходногоФайла; - АдресаРесурсов.Добавить(ОписаниеРесурса); -КонецПроцедуры +Функция ЕстьДанныеПоНазначению(Назначение) Экспорт + + Для Каждого ПередаваемыйТекст Из ОтправляемыеТекстовыеДанные Цикл + Если ПередаваемыйТекст.Назначение = Назначение Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Для Каждого ПередаваемыйФайл Из Файлы Цикл + Если ПередаваемыйФайл.Назначение = Назначение Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции Функция НовоеОписаниеРесурса() Описание = Новый Структура(); @@ -64,4 +119,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\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..c120782 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,20 @@ КонецЕсли; КонецФункции +Функция ДополнитьИменемФайлаПутьURL(ПолноеИмяФайла, ПутьURL) Экспорт + + Файл = Новый Файл(ПолноеИмяФайла); + + Если ПустаяСтрока(ПутьURL) Тогда + Возврат "/" + Файл.Имя; + ИначеЕсли Прав(ПутьURL, 1) = "/" Тогда + Возврат ПутьURL + Файл.Имя; + Иначе + Возврат ПутьURL; + КонецЕсли; + +КонецФункции + Функция ЕстьКритичныеОшибки(Ошибки) Экспорт Для Каждого Ошибка Из Ошибки Цикл Если Ошибка.Критичная Тогда 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" index ee6b932..63b17db 100644 --- "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" @@ -54,10 +54,10 @@ КонецФункции -Функция СборкаТелаЗапроса(ТекстовыеДанные, ПрочитанныеФайлы) Экспорт +Функция СборкаДанныхЗапросаВСтроку(НазначениеДанных, ТекстовыеДанные, ПрочитанныеФайлы) Экспорт Конструктор = Новый КонструкторПрограммногоКода(); - ТелоЗапроса = Новый Массив(); + ЧастиКода = Новый Массив(); КонкатенацияСПереносомСтрокиИРазделителя = " | + ""%1"" + %2"; @@ -67,7 +67,7 @@ НуженРазделитель = Ложь; МассивТекстовыхДанных = Новый Массив(); Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл - Если Не ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда + Если Не ПередаваемыйТекст.Назначение = НазначениеДанных Тогда Продолжить; КонецЕсли; @@ -82,14 +82,14 @@ КонецЦикла; Если МассивТекстовыхДанных.Количество() Тогда - ТелоЗапроса.Добавить(Конструктор.ПараметрВСтроку(СтрСоединить(МассивТекстовыхДанных))); + ЧастиКода.Добавить(Конструктор.ПараметрВСтроку(СтрСоединить(МассивТекстовыхДанных))); КонецЕсли; Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл; - Если Не ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда + Если Не ПередаваемыйФайл.Назначение = НазначениеДанных Тогда Продолжить; КонецЕсли; @@ -102,25 +102,140 @@ ПередаваемыйФайл.РазделительТелаЗапроса, ПрочитанныйФайл.ИмяПеременной); - ТелоЗапроса.Добавить(Текст); + ЧастиКода.Добавить(Текст); Иначе Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрочитанныйФайл.ИмяПеременной); - ТелоЗапроса.Добавить(Текст); + ЧастиКода.Добавить(Текст); КонецЕсли; Иначе - ТелоЗапроса.Добавить(ПрочитанныйФайл.ИмяПеременной); + ЧастиКода.Добавить(ПрочитанныйФайл.ИмяПеременной); КонецЕсли; НуженРазделитель = Истина; КонецЦикла; - Возврат СтрСоединить(ТелоЗапроса); + Возврат СтрСоединить(ЧастиКода); + +КонецФункции + +Функция СборкаURL(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт + + Пользователь = СтруктураURL.Аутентификация.Пользователь; + Пароль = СтруктураURL.Аутентификация.Пароль; + + Аутентификация = ""; + Если Не ПустаяСтрока(Пользователь) Или Не ПустаяСтрока(Пароль) Тогда + Аутентификация = СтрШаблон("%1:%2@", Пользователь, Пароль); + КонецЕсли; + + СборкаАдресаРесурса = СборкаАдресаРесурса(СтруктураURL, ТекстовыеДанные, ПрочитанныеФайлы); + + Возврат """" + + СтруктураURL.Схема + "://" + + Аутентификация + + СтруктураURL.Сервер + + Формат(СтруктураURL.Порт, "ЧГ=; ЧФ=:Ч") + + ?(ПустаяСтрока(СборкаАдресаРесурса), """", Сред(СборкаАдресаРесурса, 2)); + +КонецФункции + +Функция СборкаАдресаРесурса(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт + + Конструктор = Новый КонструкторПрограммногоКода(); + КонкатенацияСПереносомСтрокиИАмперсандом = " + | + ""&"" + "; + КонкатенацияСПереносомСтроки = " + | + "; + + ПараметрыЗапроса = Новый Массив(); + + // Исходные параметры запроса + Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл + КлючИЗначение = СтрШаблон("%1=%2", + Параметр.Ключ, + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.URLВКодировкеURL)); + + ПараметрыЗапроса.Добавить(КлючИЗначение); + КонецЦикла; + + // Дополняемые параметры запроса + Если Не ТекстовыеДанные = Неопределено Тогда + Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл + Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда + Если ПараметрыЗапроса.Количество() И Не ПустаяСтрока(ПередаваемыйТекст.РазделительТелаЗапроса) Тогда + ПараметрыЗапроса.Добавить(ПередаваемыйТекст.РазделительТелаЗапроса); + КонецЕсли; + ПараметрыЗапроса.Добавить(ПередаваемыйТекст.Значение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Параметры запроса из файлов + ПараметрыЗапросаИзФайлов = Новый Массив(); + Если Не ПрочитанныеФайлы = Неопределено Тогда + Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл + Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда + ПараметрыЗапросаИзФайлов.Добавить(ПрочитанныйФайл.ИмяПеременной); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ПараметрыЗапросаСтрокой = СтрСоединить(ПараметрыЗапроса); + ПараметрыЗапросаИзФайловСтрокой = СтрСоединить(ПараметрыЗапросаИзФайлов, КонкатенацияСПереносомСтрокиИАмперсандом); + ЕстьПараметрыЗапроса = Не ПустаяСтрока(ПараметрыЗапросаСтрокой) Или Не ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой); + + ПерваяЧасть = СтруктураURL.Путь + + ?(ЕстьПараметрыЗапроса, "?", "") + + ПараметрыЗапросаСтрокой; + + ВтораяЧасть = ?(Не ПустаяСтрока(СтруктураURL.Фрагмент), "#" + СтруктураURL.Фрагмент, ""); + + Если ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой) Тогда + + Результат = ПерваяЧасть + ВтораяЧасть; + + Если ЗначениеЗаполнено(Результат) Тогда + Результат = Конструктор.ПараметрВСтроку(Результат); + КонецЕсли; + + Иначе + + ВозможноОднойСтрокой = ПустаяСтрока(ВтораяЧасть) + И СтрЧислоСтрок(ПараметрыЗапросаИзФайловСтрокой) = 1; + + Если ВозможноОднойСтрокой Тогда + + Результат = "" + + Конструктор.ПараметрВСтроку(ПерваяЧасть + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), "", "&")) + + " + " + + ПараметрыЗапросаИзФайловСтрокой; + + Иначе + + Результат = "" + + Конструктор.ПараметрВСтроку(ПерваяЧасть) + + + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), + КонкатенацияСПереносомСтроки, + КонкатенацияСПереносомСтрокиИАмперсандом) + + + ПараметрыЗапросаИзФайловСтрокой + + + ?(Не ПустаяСтрока(ВтораяЧасть), + КонкатенацияСПереносомСтроки + Конструктор.ПараметрВСтроку(ВтораяЧасть), + ""); + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; КонецФункции 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..5e2fbd5 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" @@ -55,7 +55,7 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ПроверитьПередачуМетода() Экспорт +Процедура ТестДолжен_ПроверитьПередачуМетодаPOST() Экспорт КонсольнаяКоманда = "curl http://example.com -X POST"; @@ -453,7 +453,7 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ПроверитьПередачуОтправляемыхДанныхВСтрокуЗапроса() Экспорт +Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапроса() Экспорт КонсольнаяКоманда = "curl http://example.com \ | --get \ @@ -467,10 +467,7 @@ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """"); | |Соединение = Новый HTTPСоединение(""example.com"", 80); - | - |АдресРесурса = ""/?param1=value¶m2=value2"" - | + ""&"" + ТекстовыеДанныеФайла_1; - |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); + |HTTPЗапрос = Новый HTTPЗапрос(""?param1=value¶m2=value2&"" + ТекстовыеДанныеФайла_1); | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; @@ -482,7 +479,7 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ПроверитьПередачуОтправляемыхДанныхВСтрокуЗапросаИзФайла() Экспорт +Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапросаИзФайла() Экспорт КонсольнаяКоманда = "curl http://example.com \ | --get \ @@ -494,10 +491,7 @@ |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """"); | |Соединение = Новый HTTPСоединение(""example.com"", 80); - | - |АдресРесурса = ""/?"" - | + ТекстовыеДанныеФайла_1; - |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); + |HTTPЗапрос = Новый HTTPЗапрос(""?"" + ТекстовыеДанныеФайла_1); | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; @@ -509,7 +503,7 @@ КонецПроцедуры &Тест -Процедура ТестДолжен_ПроверитьВставкуОтправляемыхДанныхВСтрокуЗапроса() Экспорт +Процедура ТестДолжен_ПроверитьВставкуДанныхВСтрокуЗапроса() Экспорт КонсольнаяКоманда = "curl 'http://example.com?param3=value3#page-1' \ | --get \ @@ -524,8 +518,8 @@ | |Соединение = Новый HTTPСоединение(""example.com"", 80); | - |АдресРесурса = ""/?param3=value3¶m1=value¶m2=value2"" - | + ""&"" + ТекстовыеДанныеФайла_1 + |АдресРесурса = ""?param3=value3¶m1=value¶m2=value2"" + | + ""&"" + ТекстовыеДанныеФайла_1 | + ""#page-1""; |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); | @@ -789,7 +783,7 @@ | |Соединение = Новый HTTPСоединение(""example.com"", 80); | - |АдресРесурса = ""/?name=val&encodethis%26&name=%20foo&@not-a-file"" + |АдресРесурса = ""?name=val&encodethis%26&name=%20foo&@not-a-file"" | + ""&"" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); @@ -813,10 +807,7 @@ |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); | |Соединение = Новый HTTPСоединение(""example.com"", 80); - | - |АдресРесурса = ""/?"" - | + ТекстовыеДанныеФайла_1; - |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); + |HTTPЗапрос = Новый HTTPЗапрос(""?"" + ТекстовыеДанныеФайла_1); | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; @@ -838,7 +829,7 @@ |Заголовки.Вставить(""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Запрос);"; @@ -1117,7 +1108,9 @@ Ошибки = Неопределено; КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, + Новый ГенераторПрограммногоКода1С(), + Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); Ожидаем.Что(Ошибки).Заполнено(); 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..3f0ee55 --- /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,992 @@ +#Использовать asserts +#Использовать ".." + +&Тест +Процедура ТестДолжен_ПроверитьЗаголовки() Экспорт + + КонсольнаяКоманда = "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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИнициализациюЗаголовковТолькоОдинРаз() Экспорт + + КонсольнаяКоманда = "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"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуМетодаPOST() Экспорт + + КонсольнаяКоманда = "curl http://example.com -X POST"; + + ПрограммныйКод = "Результат = КоннекторHTTP.Post(""http://example.com"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуПользователя() Экспорт + + КонсольнаяКоманда = "curl http://example.com -u user:secret"; + + ПрограммныйКод = "Аутентификация = КоннекторHTTP.НоваяАутентификацияBasic(""user"", ""secret""); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Аутентификация"", Аутентификация); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуТекстовыхДанныхИзАргументовИФайлов() Экспорт + + КонсольнаяКоманда = "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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИнициализациюТелаЗапросаТолькоОдинРаз() Экспорт + + КонсольнаяКоманда = "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"", Данные);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуОдногоФайлаИзDataBinary() Экспорт + + КонсольнаяКоманда = "curl http://example.com --data-binary @path-to-file1"; + + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1""); + |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); + | + |Результат = КоннекторHTTP.Post(""http://example.com"", ТекстовыеДанныеФайла_1);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуДвухФайловИз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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуФайла() Экспорт + + КонсольнаяКоманда = "curl --upload-file path/to/file.txt http://example.com"; + + ПрограммныйКод = "Данные = Новый ДвоичныеДанные(""path/to/file.txt""); + |Результат = КоннекторHTTP.Put(""http://example.com/file.txt"", Данные);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуНесколькихФайловПоОдному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"", Данные);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИгнорированиеПередаваемыхФайловПриПревышенииКоличества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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP(), Ошибки); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + Ожидаем.Что(Ошибки).Заполнено(); + Ожидаем.Что(Ошибки[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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуТекстовыхДанныхСКодированием() Экспорт + + КонсольнаяКоманда = "curl http://example.com \ + | --data-urlencode name=val \ + | --data-urlencode '=encodethis&' \ + | --data-urlencode name@file \ + | --data-urlencode @fileonly"; + + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); + |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); + |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1; + | + |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); + |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); + |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); + | + |Данные = ""name=val&encodethis%26"" + | + ""&"" + ТекстовыеДанныеФайла_1 + | + ""&"" + ТекстовыеДанныеФайла_2; + | + |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьМножественноеИспользование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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапроса() Экспорт + + КонсольнаяКоманда = "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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуДанныхВСтрокуЗапросаИзФайла() Экспорт + + КонсольнаяКоманда = "curl http://example.com \ + | --get \ + | --data @path-to-file"; + + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file""); + |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); + |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """"); + |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """"); + | + |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьВставкуДанныхВСтрокуЗапроса() Экспорт + + КонсольнаяКоманда = "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);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_Проверить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"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьHTTPМетодOPTIONS() Экспорт + + КонсольнаяКоманда = "curl http://example.com -X OPTIONS"; + + ПрограммныйКод = "Результат = КоннекторHTTP.Options(""http://example.com"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьОбработкуНесколькихКоманд() Экспорт + + КонсольнаяКоманда = "curl http://example1.com & curl http://example2.com"; + + ПрограммныйКод = "////////////////////////////////////////////// + |// Команда #1. + | + |Результат = КоннекторHTTP.Get(""http://example1.com""); + | + |////////////////////////////////////////////// + |// Команда #2. + | + |Результат = КоннекторHTTP.Get(""http://example2.com"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьОтсутствиеИспользованияЗащищенногоСоединения() Экспорт + + КонсольнаяКоманда = "curl 'http://example.com'"; + + ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаСПаролем() Экспорт + + КонсольнаяКоманда = "curl 'https://example.com' -E certfile.pem:secret"; + + ПрограммныйКод = "ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""КлиентскийСертификатSSL"", Новый СертификатКлиентаФайл(""certfile.pem"", ""secret"")); + | + |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаБезПароля() Экспорт + + КонсольнаяКоманда = "curl 'https://example.com' --cert certfile.pem"; + + ПрограммныйКод = "ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""КлиентскийСертификатSSL"", Новый СертификатКлиентаФайл(""certfile.pem"")); + | + |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаИСертификатыУЦИзФайла() Экспорт + + КонсольнаяКоманда = "curl 'https://example.com' --cert certfile.pem --cacert CA-file.txt"; + + ПрограммныйКод = "ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""ПроверятьSSL"", Новый СертификатыУдостоверяющихЦентровФайл(""CA-file.txt"")); + |ДополнительныеПараметры.Вставить(""КлиентскийСертификатSSL"", Новый СертификатКлиентаФайл(""certfile.pem"")); + | + |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуПараметровЗапроса() Экспорт + + КонсольнаяКоманда = "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ВКодировкеURL); + |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1; + | + |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); + |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); + |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); + | + |URL = ""http://example.com?name=val&encodethis%26&name=%20foo&@not-a-file"" + | + ""&"" + ТекстовыеДанныеФайла_1 + | + ""&"" + ТекстовыеДанныеФайла_2; + | + |Результат = КоннекторHTTP.Get(URL);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуПараметровЗапросаТолькоИзФайла() Экспорт + + КонсольнаяКоманда = "curl http://example.com --url-query @fileonly"; + + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); + |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); + |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + | + |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуПараметровЗапросаИФайла() Экспорт + + КонсольнаяКоманда = "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 = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПрокси() Экспорт + + КонсольнаяКоманда = "curl http://example.com --proxy http://proxy.example:1088"; + + ПрограммныйКод = "Прокси = Новый ИнтернетПрокси(); + |Прокси.Установить(""http"", ""proxy.example"", 1088, , , Ложь); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Прокси"", Прокси); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИнициализациюПроксиТолькоОдинРаз() Экспорт + + КонсольнаяКоманда = "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"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьАутентификациюПроксиBasic() Экспорт + + КонсольнаяКоманда = "curl http://example.com \ + | --proxy http://proxy.example \ + | --proxy-user user:secret"; + + ПрограммныйКод = "Прокси = Новый ИнтернетПрокси(); + |Прокси.Установить(""http"", ""proxy.example"", 1080, ""user"", ""secret"", Ложь); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Прокси"", Прокси); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьАутентификациюПроксиNTLM() Экспорт + + КонсольнаяКоманда = "curl http://example.com \ + | --proxy http://proxy.example \ + | --proxy-ntlm"; + + ПрограммныйКод = "Прокси = Новый ИнтернетПрокси(); + |Прокси.Установить(""http"", ""proxy.example"", 1080); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Прокси"", Прокси); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьОшибкуПроксиПротоколНеПоддерживается() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ --proxy socks5h://proxy.example"; + + Ошибки = Неопределено; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, + Новый ГенераторПрограммногоКодаКоннекторHTTP(), + Ошибки); + + Ожидаем.Что(Результат).Не_().Заполнено(); + Ожидаем.Что(Ошибки).Заполнено(); + Ожидаем.Что(Ошибки[0].Текст).Равно("Прокси протокол socks5h не поддерживается"); + Ожидаем.Что(Ошибки[0].Критичная).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьТаймаут() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ --max-time 20 --connect-timeout 5.5"; + + ПрограммныйКод = "ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Таймаут"", 25.5); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьОтсутствиеТаймаутаЕслиНеУстановленыОбаТаймаута() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ --max-time 20 --connect-timeout 0"; + + ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачу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"", Данные, ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуJsonИзСтроки() Экспорт + + КонсольнаяКоманда = "curl 'http://example.com' --json '{""drink"": ""coffe""}'"; + + ПрограммныйКод = "Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/json""); + |Заголовки.Вставить(""Accept"", ""application/json""); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки); + | + |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачуJsonИзНесколькихСтрок() Экспорт + + КонсольнаяКоманда = "curl 'http://example.com' \ + | --json '{""drink"":' \ + | --json ' ""coffe""}'"; + + ПрограммныйКод = "Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/json""); + |Заголовки.Вставить(""Accept"", ""application/json""); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки); + | + |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПередачу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"", Данные, ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьUserAgent() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ -A 'Agent 007'"; + + ПрограммныйКод = "Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""User-Agent"", ""Agent 007""); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПробелыВUserAgent() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ -A ' '"; + + ПрограммныйКод = "Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""User-Agent"", """"); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПустойUserAgent() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ -A ''"; + + ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьОтсутстивиеЗамещенияUserAgent() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ -H 'User-Agent: Agent 007' -A 'Agent 001'"; + + ПрограммныйКод = "Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""User-Agent"", ""Agent 007""); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьИспользованиеОпцийТолькоСвоейКоманды() Экспорт + + КонсольнаяКоманда = "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"");"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьBearerToken() Экспорт + + КонсольнаяКоманда = "curl http://example.com/ --oauth2-bearer 'mF_9.B5f-4.1JqM'"; + + ПрограммныйКод = "Аутентификация = КоннекторHTTP.НоваяАутентификацияBearer(""mF_9.B5f-4.1JqM""); + | + |ДополнительныеПараметры = Новый Структура(); + |ДополнительныеПараметры.Вставить(""Аутентификация"", Аутентификация); + | + |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры \ No newline at end of file diff --git "a/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" "b/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" index 9d02551..6264350 100644 --- "a/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" +++ "b/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" @@ -34,9 +34,14 @@ КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); ПоддерживаемыеОпции = КонвертерКомандыCURL.ПоддерживаемыеОпции(); + ПоддерживаемыеОпцииСоответствие = Новый Соответствие(); + Для Каждого ИмяОпции Из ПоддерживаемыеОпции Цикл + ПоддерживаемыеОпцииСоответствие.Вставить(ИмяОпции, Истина); + КонецЦикла; + Для Каждого Строка Из Опции Цикл ОпцииБезОбработки = СтрРазделить(Строка.Опции, " "); - Если ПоддерживаемыеОпции.Получить(ОпцияБезТире(ОпцииБезОбработки[0])) = Неопределено Тогда + Если ПоддерживаемыеОпцииСоответствие.Получить(ОпцияБезТире(ОпцииБезОбработки[0])) = Неопределено Тогда ОпцииОбработанные = Новый Массив(); Для Каждого Опция Из ОпцииБезОбработки Цикл Опция = ОпцияБезТире(Опция); From ba766e91f14329e89cc73f0ce40f73ccfc7f9dea Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 17:22:15 +0300 Subject: [PATCH 02/29] =?UTF-8?q?refactor:=20=D0=98=D0=BD=D0=B8=D1=86?= =?UTF-8?q?=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B0?= =?UTF-8?q?=D1=83=D1=82=D0=B5=D0=BD=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=A1?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BE=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8=20=D1=81=20oscript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\275\320\265\320\272\321\202\320\276\321\200HTTP.os" | 7 ++++--- ...75\320\265\320\272\321\202\320\276\321\200HTTP_test.os" | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) 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" index bccc2ad..9d9fff3 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\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" @@ -412,9 +412,10 @@ Конструктор .ДобавитьПустуюСтроку() - .ДобавитьСтроку("%1 = КоннекторHTTP.НоваяАутентификацияBasic(%2);", + .ДобавитьСтроку("%1 = Новый Структура(""Пользователь, Пароль"", %2, %3);", ИмяПараметраАутентификация, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода)); + Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя), + Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)); КонецПроцедуры @@ -426,7 +427,7 @@ Конструктор .ДобавитьПустуюСтроку() - .ДобавитьСтроку("%1 = КоннекторHTTP.НоваяАутентификацияBearer(%2);", + .ДобавитьСтроку("%1 = Новый Структура(""Токен, Тип"", %2, ""Bearer"");", ИмяПараметраАутентификация, Конструктор.ПараметрВСтроку(ПолучитьТокенBearer())); 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" index 3f0ee55..e8f3054 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\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" @@ -73,7 +73,7 @@ КонсольнаяКоманда = "curl http://example.com -u user:secret"; - ПрограммныйКод = "Аутентификация = КоннекторHTTP.НоваяАутентификацияBasic(""user"", ""secret""); + ПрограммныйКод = "Аутентификация = Новый Структура(""Пользователь, Пароль"", ""user"", ""secret""); | |ДополнительныеПараметры = Новый Структура(); |ДополнительныеПараметры.Вставить(""Аутентификация"", Аутентификация); @@ -977,7 +977,7 @@ КонсольнаяКоманда = "curl http://example.com/ --oauth2-bearer 'mF_9.B5f-4.1JqM'"; - ПрограммныйКод = "Аутентификация = КоннекторHTTP.НоваяАутентификацияBearer(""mF_9.B5f-4.1JqM""); + ПрограммныйКод = "Аутентификация = Новый Структура(""Токен, Тип"", ""mF_9.B5f-4.1JqM"", ""Bearer""); | |ДополнительныеПараметры = Новый Структура(); |ДополнительныеПараметры.Вставить(""Аутентификация"", Аутентификация); From ba3c5a79a3249adb5eaaab999abbbd22d383ff6c Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 20:52:56 +0300 Subject: [PATCH 03/29] =?UTF-8?q?feat:=20=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=20=D0=B4=D0=BB=D1=8F=20cli?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...74\320\260\320\275\320\264\321\213CURL.os" | 105 ++++++++++++++++++ src/main.os | 47 +------- 2 files changed, 108 insertions(+), 44 deletions(-) create mode 100644 "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" 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..816edfd --- /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,105 @@ +#Использовать "../../internal" + +Перем ВходящиеАргументы; // Массив из Строка +Перем Генератор; // Объект генератора программного кода + +#Область ПрограммныйИнтерфейс + +Процедура Конвертировать() Экспорт + + Если Не НайденаКоманда() Тогда + ВызватьИсключение "Не найдена команда convert"; + КонецЕсли; + + ПодготовленныеАргументы = ПодготовитьАргументы(); + + Ошибки = Новый Массив(); + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + + Попытка + Результат = КонвертерКомандыCURL.Конвертировать(ПодготовленныеАргументы, Генератор, Ошибки); + Исключение + Результат = ""; + Ошибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); + КонецПопытки; + + Для Каждого Ошибка Из Ошибки Цикл + Цвет = ?(Ошибка.Критичная, "Красный", "Желтый"); + ЦветнойВывод.Вывести("// "); + ЦветнойВывод.ВывестиСтроку(Ошибка.Текст, Цвет); + КонецЦикла; + + Если ЗначениеЗаполнено(Результат) Тогда + Если Ошибки.Количество() Тогда + Консоль.Вывести(Символы.ПС); + КонецЕсли; + + Консоль.Вывести(Результат); + КонецЕсли; + +КонецПроцедуры + +Функция НайденаКоманда() Экспорт + Возврат ВходящиеАргументы.Количество() И НРег(ВходящиеАргументы[0]) = "convert"; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПриСозданииОбъекта(Аргументы) + ВходящиеАргументы = Аргументы; +КонецПроцедуры + +Функция ПодготовитьАргументы() + + ПодготовленныеАргументы = Новый Массив(); + ОбщегоНазначения.ДополнитьМассив(ПодготовленныеАргументы, ВходящиеАргументы); + + ПодготовленныеАргументы[0] = "curl"; + + УдалитьПовторяющийАргументCurl(ПодготовленныеАргументы); + ПрочитатьАргументГенератора(ПодготовленныеАргументы); + + Возврат ПодготовленныеАргументы; + +КонецФункции + +Процедура УдалитьПовторяющийАргументCurl(Аргументы) + + Если Аргументы.Количество() > 1 И НРег(Аргументы[1]) = "curl" Тогда + Аргументы.Удалить(0); + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьАргументГенератора(Аргументы) + + ИндексАргумента = 1; + + Если Аргументы.Количество() > ИндексАргумента Тогда + Аргумент = НРег(Аргументы[ИндексАргумента]); + Генератор = ПолучитьГенераторПоАргументу(Аргумент); + КонецЕсли; + + Если Генератор = Неопределено Тогда + Генератор = ГенераторПоУмолчанию(); + Иначе + Аргументы.Удалить(ИндексАргумента); + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьГенераторПоАргументу(Аргумент) + Если Аргумент = "connector" Тогда + Возврат Новый ГенераторПрограммногоКодаКоннекторHTTP(); + ИначеЕсли Аргумент = "1c" Тогда + Возврат Новый ГенераторПрограммногоКода1С(); + КонецЕсли; +КонецФункции + +Функция ГенераторПоУмолчанию() + Возврат Новый ГенераторПрограммногоКода1С(); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/src/main.os b/src/main.os index dfe87a0..fd4e83b 100644 --- a/src/main.os +++ b/src/main.os @@ -12,8 +12,9 @@ ИнициализацияТекущегоКаталога(); - Если ЕстьКомандаКонвертации() Тогда - КонвертироватьИВывестиВКонсоль(); + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(АргументыКоманднойСтроки); + Если КонсольныйКонвертер.НайденаКоманда() Тогда + КонсольныйКонвертер.Конвертировать(); Иначе Поделка = Новый Поделка(); Поделка.ЗапуститьПриложение(); @@ -21,48 +22,6 @@ КонецПроцедуры -Процедура КонвертироватьИВывестиВКонсоль() - - Аргументы = Новый Массив(); - ОбщегоНазначения.ДополнитьМассив(Аргументы, АргументыКоманднойСтроки); - Аргументы[0] = "curl"; - - Если Аргументы.Количество() > 1 - И Аргументы[1] = "curl" Тогда - Аргументы.Удалить(0); - КонецЕсли; - - Ошибки = Новый Массив(); - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - - Попытка - Результат = КонвертерКомандыCURL.Конвертировать(Аргументы, Новый ГенераторПрограммногоКода1С(), Ошибки); - Исключение - Результат = ""; - Ошибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки; - - Для Каждого Ошибка Из Ошибки Цикл - Цвет = ?(Ошибка.Критичная, "Красный", "Желтый"); - ЦветнойВывод.Вывести("// "); - ЦветнойВывод.ВывестиСтроку(Ошибка.Текст, Цвет); - КонецЦикла; - - Если ЗначениеЗаполнено(Результат) Тогда - Если Ошибки.Количество() Тогда - Консоль.Вывести(Символы.ПС); - КонецЕсли; - - Консоль.Вывести(Результат); - КонецЕсли; - -КонецПроцедуры - -Функция ЕстьКомандаКонвертации() - Возврат АргументыКоманднойСтроки.Количество() - И АргументыКоманднойСтроки[0] = "convert"; -КонецФункции - Процедура ИнициализацияТекущегоКаталога() ТекущийКаталог = Новый Файл(ОбъединитьПути(ТекущийСценарий().Каталог, "..")).ПолноеИмя; УстановитьТекущийКаталог(ТекущийКаталог); From 1906a6c94b6f14d5f88819d46a41ccd368453134 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 20:53:30 +0300 Subject: [PATCH 04/29] =?UTF-8?q?feat:=20=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=20=D0=B4=D0=BB=D1=8F=20web=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\275\321\202\321\200\320\276\320\273.os" | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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 From 63dcc94fdccb30fea90c089e5f8eb56c1bdba57b Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 21:49:06 +0300 Subject: [PATCH 05/29] =?UTF-8?q?fix(cli):=20=D0=9D=D0=B5=20=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D1=8F=D0=BB=D1=81=D1=8F=20=D0=B0=D1=80=D0=B3=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=20curl=20=D0=BF=D1=80=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20convert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...74\320\260\320\275\320\264\321\213CURL.os" | 28 ++++++++++++++----- src/main.os | 1 - 2 files changed, 21 insertions(+), 8 deletions(-) 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" index 816edfd..ed74bb1 100644 --- "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" @@ -1,12 +1,17 @@ +#Использовать coloratos +#Использовать "../../core" #Использовать "../../internal" Перем ВходящиеАргументы; // Массив из Строка Перем Генератор; // Объект генератора программного кода +Перем РезультатКонвертации; // Строка #Область ПрограммныйИнтерфейс Процедура Конвертировать() Экспорт + Генератор = Неопределено; + Если Не НайденаКоманда() Тогда ВызватьИсключение "Не найдена команда convert"; КонецЕсли; @@ -17,9 +22,9 @@ КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Попытка - Результат = КонвертерКомандыCURL.Конвертировать(ПодготовленныеАргументы, Генератор, Ошибки); + РезультатКонвертации = КонвертерКомандыCURL.Конвертировать(ПодготовленныеАргументы, Генератор, Ошибки); Исключение - Результат = ""; + РезультатКонвертации = ""; Ошибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки; @@ -29,12 +34,12 @@ ЦветнойВывод.ВывестиСтроку(Ошибка.Текст, Цвет); КонецЦикла; - Если ЗначениеЗаполнено(Результат) Тогда + Если ЗначениеЗаполнено(РезультатКонвертации) Тогда Если Ошибки.Количество() Тогда Консоль.Вывести(Символы.ПС); КонецЕсли; - Консоль.Вывести(Результат); + Консоль.Вывести(РезультатКонвертации); КонецЕсли; КонецПроцедуры @@ -45,10 +50,19 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +Функция ПолучитьРезультат() Экспорт + Возврат РезультатКонвертации; +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура ПриСозданииОбъекта(Аргументы) ВходящиеАргументы = Аргументы; + РезультатКонвертации = ""; КонецПроцедуры Функция ПодготовитьАргументы() @@ -58,9 +72,9 @@ ПодготовленныеАргументы[0] = "curl"; - УдалитьПовторяющийАргументCurl(ПодготовленныеАргументы); ПрочитатьАргументГенератора(ПодготовленныеАргументы); - + УдалитьПовторяющийАргументCurl(ПодготовленныеАргументы); + Возврат ПодготовленныеАргументы; КонецФункции @@ -68,7 +82,7 @@ Процедура УдалитьПовторяющийАргументCurl(Аргументы) Если Аргументы.Количество() > 1 И НРег(Аргументы[1]) = "curl" Тогда - Аргументы.Удалить(0); + Аргументы.Удалить(1); КонецЕсли; КонецПроцедуры diff --git a/src/main.os b/src/main.os index fd4e83b..23e8cd6 100644 --- a/src/main.os +++ b/src/main.os @@ -4,7 +4,6 @@ #Использовать autumn #Использовать autumn-cli #Использовать winow -#Использовать coloratos #Использовать "core" #Использовать "cli" From 18539a434275747273928f7897d80dcf6a6afad1 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 21:50:22 +0300 Subject: [PATCH 06/29] =?UTF-8?q?test(cli):=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20con?= =?UTF-8?q?vert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...74\320\260\320\275\320\264\321\213CURL.os" | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 "tests/\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" diff --git "a/tests/\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/tests/\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..f8fadbc --- /dev/null +++ "b/tests/\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,140 @@ +#Использовать asserts +#Использовать coloratos +#Использовать "../src/cli" + +&Тест +Процедура ТестДолжен_ПроверитьКонвертациюПоУмолчанию() Экспорт + + Аргументы = Новый Массив(); + Аргументы.Добавить("convert"); + Аргументы.Добавить("http://example.com/"); + + ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80); + |HTTPЗапрос = Новый HTTPЗапрос(""/""); + | + |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; + + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(Аргументы); + КонсольныйКонвертер.Конвертировать(); + + Результат = КонсольныйКонвертер.ПолучитьРезультат(); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьКонвертацию1C() Экспорт + + Аргументы = Новый Массив(); + Аргументы.Добавить("convert"); + Аргументы.Добавить("1C"); + Аргументы.Добавить("http://example.com/"); + + ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80); + |HTTPЗапрос = Новый HTTPЗапрос(""/""); + | + |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; + + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(Аргументы); + КонсольныйКонвертер.Конвертировать(); + + Результат = КонсольныйКонвертер.ПолучитьРезультат(); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьКонвертациюКоннектор() Экспорт + + Аргументы = Новый Массив(); + Аргументы.Добавить("convert"); + Аргументы.Добавить("connector"); + Аргументы.Добавить("http://example.com/"); + + ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; + + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(Аргументы); + КонсольныйКонвертер.Конвертировать(); + + Результат = КонсольныйКонвертер.ПолучитьРезультат(); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьОтсутствиеВлиянияРегистраКоманд() Экспорт + + Аргументы = Новый Массив(); + Аргументы.Добавить("coNverT"); + Аргументы.Добавить("coNnecTor"); + Аргументы.Добавить("http://example.com/"); + + ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; + + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(Аргументы); + КонсольныйКонвертер.Конвертировать(); + + Результат = КонсольныйКонвертер.ПолучитьРезультат(); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьСПередачейАргументаCurlБезЯзыка() Экспорт + + Аргументы = Новый Массив(); + Аргументы.Добавить("convert"); + Аргументы.Добавить("curl"); + Аргументы.Добавить("http://example.com/"); + + ПрограммныйКод = "Соединение = Новый HTTPСоединение(""example.com"", 80); + |HTTPЗапрос = Новый HTTPЗапрос(""/""); + | + |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; + + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(Аргументы); + КонсольныйКонвертер.Конвертировать(); + + Результат = КонсольныйКонвертер.ПолучитьРезультат(); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьСПередачейАргументаCurlИЯзыка() Экспорт + + Аргументы = Новый Массив(); + Аргументы.Добавить("convert"); + Аргументы.Добавить("connector"); + Аргументы.Добавить("curl"); + Аргументы.Добавить("http://example.com/"); + + ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; + + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(Аргументы); + КонсольныйКонвертер.Конвертировать(); + + Результат = КонсольныйКонвертер.ПолучитьРезультат(); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьВыбрасываниеИсключенияСОшибочнойКомандой() Экспорт + + Аргументы = Новый Массив(); + Аргументы.Добавить("wrong"); + + КонсольныйКонвертер = Новый КонсольныйКонвертерКомандыCURL(Аргументы); + + Ожидаем.Что(КонсольныйКонвертер) + .Метод("Конвертировать") + .ВыбрасываетИсключение(); + +КонецПроцедуры \ No newline at end of file From b4ae31d884e1a85f875d67d5ee07d8a86fce0c69 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 22:46:24 +0300 Subject: [PATCH 07/29] =?UTF-8?q?test:=20=D0=9E=D0=B4=D0=BD=D0=BE=D0=BA?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D0=BD=D0=BE=D0=B5=20=D1=81=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B0=20=D0=9A=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8BCURL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\276\320\264\320\2601\320\241_test.os" | 223 +++++++----------- ...0\272\321\202\320\276\321\200HTTP_test.os" | 145 +++++------- ...0\260\320\275\320\264\321\213CURL_test.os" | 19 +- 3 files changed, 145 insertions(+), 242 deletions(-) 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 5e2fbd5..5251905 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,8 +30,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -47,8 +57,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -64,8 +73,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -81,8 +89,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -128,8 +135,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -167,8 +173,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -188,8 +193,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -220,8 +224,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -238,8 +241,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -264,8 +266,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -297,8 +298,7 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С(), Ошибки); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки); Ожидаем.Что(Результат).Равно(ПрограммныйКод); Ожидаем.Что(Ошибки).Заполнено(); @@ -320,8 +320,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -345,8 +344,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -368,8 +366,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -406,8 +403,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -445,8 +441,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -471,8 +466,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -495,8 +489,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -525,8 +518,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -555,8 +547,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""HEAD"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -583,8 +574,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -600,8 +590,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -619,8 +608,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -645,8 +633,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -671,8 +658,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -691,8 +677,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -711,8 +696,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -732,8 +716,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -754,8 +737,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -790,8 +772,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -811,8 +792,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -834,8 +814,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -851,8 +830,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""file.html"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -877,8 +855,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""page2.html"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -910,8 +887,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -943,8 +919,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""index.html"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -957,8 +932,7 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); Ожидаем.Что(Ошибки).Заполнено(); @@ -981,8 +955,7 @@ |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");"; ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути()); - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1002,8 +975,7 @@ |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");"; ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути()); - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1022,8 +994,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1049,8 +1020,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1071,8 +1041,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1093,8 +1062,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1107,10 +1075,7 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, - Новый ГенераторПрограммногоКода1С(), - Ошибки); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); Ожидаем.Что(Ошибки).Заполнено(); @@ -1129,8 +1094,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1146,8 +1110,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1177,8 +1140,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1199,8 +1161,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1223,8 +1184,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1253,8 +1213,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1273,8 +1232,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1293,8 +1251,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1310,8 +1267,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1330,8 +1286,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1375,8 +1330,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1395,8 +1349,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1411,8 +1364,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1429,8 +1381,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1445,8 +1396,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1464,8 +1414,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1480,8 +1429,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1496,8 +1444,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1514,8 +1461,7 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С(), Ошибки); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки); Ожидаем.Что(Результат).Равно(ПрограммныйКод); Ожидаем.Что(Ошибки).Заполнено(); @@ -1533,8 +1479,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1554,8 +1499,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1570,8 +1514,7 @@ | |Соединение.Записать(""path/to/file.txt"", ""/newfile.txt"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1586,8 +1529,7 @@ | |Соединение.Записать(""path/to/file.txt"", ""/file.txt"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1602,8 +1544,7 @@ | |Соединение.Записать(""path/to/file.txt"", ""/dir/file.txt"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1618,8 +1559,7 @@ | |Файлы = Соединение.НайтиФайлы(""/dir"", ""*"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -1634,8 +1574,7 @@ | |Файл = Соединение.НайтиФайлы(""/dir/file.txt"")[0];"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); 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" index e8f3054..ddfd8a0 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\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" @@ -1,6 +1,17 @@ #Использовать asserts #Использовать ".." +Перем КонвертерКомандыCURL; // см. КонвертерКомандыCURL +Перем Генератор; // см. ГенераторПрограммногоКодаКоннекторHTTP + +&Инициализация +Процедура ПередЗапускомТестов() Экспорт + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + Генератор = Новый ГенераторПрограммногоКодаКоннекторHTTP(); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ПроверитьЗаголовки() Экспорт @@ -19,8 +30,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -47,8 +57,7 @@ | |Результат = КоннекторHTTP.Get(""http://example2.com/page2"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -61,8 +70,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Post(""http://example.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -80,8 +88,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -120,8 +127,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -148,8 +154,7 @@ |// Запрос 2. http://example2.com |Результат = КоннекторHTTP.Post(""http://example2.com"", Данные);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -165,8 +170,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ТекстовыеДанныеФайла_1);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -190,8 +194,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -205,8 +208,7 @@ ПрограммныйКод = "Данные = Новый ДвоичныеДанные(""path/to/file.txt""); |Результат = КоннекторHTTP.Put(""http://example.com/file.txt"", Данные);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -225,8 +227,7 @@ |Данные = Новый ДвоичныеДанные(""path/to/file2.txt""); |Результат = КоннекторHTTP.Put(""http://example.com/file2.txt"", Данные);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -252,8 +253,7 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP(), Ошибки); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки); Ожидаем.Что(Результат).Равно(ПрограммныйКод); Ожидаем.Что(Ошибки).Заполнено(); @@ -276,8 +276,7 @@ |// Запрос 2. http://example2.com |Результат = КоннекторHTTP.Get(""http://example2.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -307,8 +306,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -334,8 +332,7 @@ |// Запрос 4. http://example4.com |Результат = КоннекторHTTP.Get(""http://example4.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -357,8 +354,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com?param1=value¶m2=value2&"" + ТекстовыеДанныеФайла_1);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -378,8 +374,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -405,8 +400,7 @@ | |Результат = КоннекторHTTP.Get(URL);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -429,8 +423,7 @@ | |Результат = КоннекторHTTP.Head(""http://example2.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -443,8 +436,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Options(""http://example.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -465,8 +457,7 @@ | |Результат = КоннекторHTTP.Get(""http://example2.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -479,8 +470,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -496,8 +486,7 @@ | |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -513,8 +502,7 @@ | |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -531,8 +519,7 @@ | |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -564,8 +551,7 @@ | |Результат = КоннекторHTTP.Get(URL);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -582,8 +568,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -609,8 +594,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ТекстовыеДанныеФайла_1, ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -629,8 +613,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -656,8 +639,7 @@ | |Результат = КоннекторHTTP.Get(""http://example2.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -678,8 +660,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -700,8 +681,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -714,10 +694,7 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, - Новый ГенераторПрограммногоКодаКоннекторHTTP(), - Ошибки); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); Ожидаем.Что(Ошибки).Заполнено(); @@ -736,8 +713,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -750,8 +726,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -780,8 +755,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные, ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -801,8 +775,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -824,8 +797,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -853,8 +825,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные, ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -873,8 +844,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -893,8 +863,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -907,8 +876,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -927,8 +895,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -965,8 +932,7 @@ | |Результат = КоннекторHTTP.Get(""http://example3.com"");"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -984,8 +950,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКодаКоннекторHTTP()); + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); Ожидаем.Что(Результат).Равно(ПрограммныйКод); diff --git "a/tests/\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_test.os" "b/tests/\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_test.os" index 22b56b4..d3ac8d3 100644 --- "a/tests/\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_test.os" +++ "b/tests/\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_test.os" @@ -1,6 +1,15 @@ #Использовать asserts #Использовать ".." +Перем КонвертерКомандыCURL; // см. КонвертерКомандыCURL + +&Инициализация +Процедура ПередЗапускомТестов() Экспорт + + КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); + +КонецПроцедуры + &Тест Процедура ТестДолжен_ПроверитьОшибкуКомандаДолжнаНачинатьсяСCurl() Экспорт @@ -8,7 +17,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); @@ -25,7 +33,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); @@ -42,7 +49,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); @@ -64,7 +70,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Равно(ПрограммныйКод); @@ -81,7 +86,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); @@ -98,7 +102,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); @@ -123,7 +126,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); @@ -150,7 +152,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); @@ -172,7 +173,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Ошибки, "Команда валидна: " + КонсольнаяКоманда).Не_().Заполнено(); @@ -187,7 +187,6 @@ Ошибки = Неопределено; - КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки); Ожидаем.Что(Результат).Не_().Заполнено(); From 9040d9bac51d08b39663055a6d0e7e56ea7f020e Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 23:13:06 +0300 Subject: [PATCH 08/29] =?UTF-8?q?refactor:=20=D0=A3=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=8F=D0=B4=D0=BE=D1=87=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=B4=D1=83=D1=80=20=D0=B8=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\232\320\276\320\264\320\2601\320\241.os" | 440 +++++++++--------- ...65\320\272\321\202\320\276\321\200HTTP.os" | 169 +++---- ...74\320\260\320\275\320\264\321\213CURL.os" | 12 +- 3 files changed, 319 insertions(+), 302 deletions(-) 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 8ee75d5..b8853cd 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" @@ -36,67 +36,23 @@ // Строка - Программный код Функция Получить(Описание, Ошибки = Неопределено) Экспорт - МаксимальнаяДлинаАдресаВКомментарии = 100; - - ОписаниеЗапроса = Описание; - - ВызванМетодПоТекущемуURL = Ложь; - ПрочитанныеФайлы.Очистить(); - Если Ошибки = Неопределено Тогда Ошибки = Новый Массив(); КонецЕсли; + ОписаниеЗапроса = Описание; ИсходящиеОшибки = Ошибки; - Конструктор = Новый КонструкторПрограммногоКода(); - + + ПрочитанныеФайлы.Очистить(); + ОпределитьМетодУстановкиТелаЗапроса(); - - ВывестиЗаголовки(); + ДобавитьЗаголовки(); ДобавитьЧтениеФайлов(); ДобавитьДанныеЗапроса(); - ВывестиЗащищенноеСоединение(); - ВывестиИнициализациюПрокси(); - - КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество(); - НомерЗапроса = 0; - Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл - - НомерЗапроса = НомерЗапроса + 1; - СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); - ВызванМетодПоТекущемуURL = Ложь; - - Конструктор.ДобавитьПустуюСтроку(); - - Если КоличествоURL > 1 Тогда - Конструктор.ДобавитьКомментарий("Запрос %1. %2", - НомерЗапроса, - Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)); - КонецЕсли; - - Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда - ВывестиHTTPСоединение(СтруктураURL); - ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса); - - Если Не ВызванМетодПоТекущемуURL Тогда - ВывестиHTTPЗапрос(СтруктураURL); - ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса); - ВывестиВызовHTTPМетода(ОписаниеРесурса); - КонецЕсли; - ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда - ВывестиFTPСоединение(СтруктураURL); - ВывестиВызовFTPМетода(ОписаниеРесурса, СтруктураURL); - Иначе - ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема); - ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); - КонецЕсли; - - Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда - Возврат ""; - КонецЕсли; - - КонецЦикла; + ДобавитьЗащищенноеСоединение(); + ДобавитьПрокси(); + ДобавитьЗапросы(); Возврат Конструктор.ПолучитьРезультат(); @@ -185,30 +141,81 @@ ИмяПараметраТелоЗапросаСтрока = "ТелоЗапроса"; ПрочитанныеФайлы = Новый Массив(); - ВызванМетодПоТекущемуURL = Ложь; КонецПроцедуры -Функция ПолучитьПорт(СтруктураURL) +Процедура ДобавитьЗаголовки() + + Если Не ОписаниеЗапроса.Заголовки.Количество() Тогда + Возврат; + КонецЕсли; - Порт = СтруктураURL.Порт; - Если Не ЗначениеЗаполнено(Порт) Тогда - Если СтруктураURL.Схема = ПротоколыURL.HTTPS Тогда - Порт = 443; - ИначеЕсли СтруктураURL.Схема = ПротоколыURL.HTTP Тогда - Порт = 80; - ИначеЕсли СтруктураURL.Схема = ПротоколыURL.FTPS Тогда - Порт = 990; - ИначеЕсли СтруктураURL.Схема = ПротоколыURL.FTP Тогда - Порт = 21; + Конструктор.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки); + + Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл + ПараметрыФункции = Новый Массив(); + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ)); + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение)); + + Конструктор.ДобавитьСтроку("%1.Вставить(%2);", + ИмяПараметраЗаголовки, + Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьЧтениеФайлов() + + ТребуетсяЧтениеФайловТелаЗапроса = Не МетодУстановкиТелаЗапроса = "ИзФайла"; + + ФайлыДляЧтения = Новый Массив(); + Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл + + Если Не (ПередаваемыйФайл.ПрочитатьСодержимое + Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда + Продолжить; КонецЕсли; + + Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса + И Не ТребуетсяЧтениеФайловТелаЗапроса Тогда + Продолжить; + КонецЕсли; + + ФайлыДляЧтения.Добавить(ПередаваемыйФайл); + + КонецЦикла; + + Код = УниверсальныеБлокиКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы); + + Если Не ПустаяСтрока(Код) Тогда + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку(Код); КонецЕсли; - Возврат Порт; +КонецПроцедуры -КонецФункции +Процедура ДобавитьДанныеЗапроса() -Процедура ВывестиЗащищенноеСоединение() + ТелоЗапросаСтрока = ""; + ТелоЗапроса = УниверсальныеБлокиКода.СборкаДанныхЗапросаВСтроку( + НазначенияПередаваемыхДанных.ТелоЗапроса, + ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, + ПрочитанныеФайлы); + + Если ЗначениеЗаполнено(ТелоЗапроса) Тогда + Если СтрЧислоСтрок(ТелоЗапроса) = 1 Тогда + ТелоЗапросаСтрока = ТелоЗапроса; + Иначе + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = %2;", ИмяПараметраТелоЗапросаСтрока, ТелоЗапроса); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьЗащищенноеСоединение() ИспользуетсяЗащищенноеСоединение = Ложь; @@ -264,7 +271,7 @@ КонецПроцедуры -Процедура ВывестиИнициализациюПрокси() +Процедура ДобавитьПрокси() Если Не ОписаниеЗапроса.ИспользуетсяПрокси() Тогда Возврат; @@ -302,158 +309,57 @@ КонецПроцедуры -Процедура ВывестиHTTPСоединение(СтруктураURL) - - Таймаут = 0; - Если ЗначениеЗаполнено(ОписаниеЗапроса.Таймаут) И ЗначениеЗаполнено(ОписаниеЗапроса.ТаймаутСоединения) Тогда - Таймаут = ОписаниеЗапроса.Таймаут + ОписаниеЗапроса.ТаймаутСоединения; - КонецЕсли; - - ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL); - - ПараметрыФункции = Новый Массив; - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(СтруктураURL.Сервер)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL))); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)); - ПараметрыФункции.Добавить(?(ОписаниеЗапроса.ИспользуетсяПрокси(), ИмяПараметраПрокси, "")); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут)); - ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, "")); - - Конструктор.ДобавитьСтроку("%1 = Новый HTTPСоединение(%2);", - ИмяПараметраСоединение, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); - -КонецПроцедуры - -Процедура ВывестиFTPСоединение(СтруктураURL) +Процедура ДобавитьЗапросы() - Если ЗначениеЗаполнено(ОписаниеЗапроса.FTPАдресОбратногоСоединения) - И Не ОписаниеЗапроса.FTPАдресОбратногоСоединения = "-" Тогда - ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка("Адрес из опции -P, --ftp-port было проигнорировано")); - КонецЕсли; - - Таймаут = 0; - Если ЗначениеЗаполнено(ОписаниеЗапроса.Таймаут) И ЗначениеЗаполнено(ОписаниеЗапроса.ТаймаутСоединения) Тогда - Таймаут = ОписаниеЗапроса.Таймаут + ОписаниеЗапроса.ТаймаутСоединения; - КонецЕсли; - - ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL); - - ПараметрыФункции = Новый Массив; - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(СтруктураURL.Сервер)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ПолучитьПорт(СтруктураURL))); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)); - ПараметрыФункции.Добавить(?(ОписаниеЗапроса.ИспользуетсяПрокси(), ИмяПараметраПрокси, "")); - ПараметрыФункции.Добавить(?(ОписаниеЗапроса.FTPПассивныйРежимСоединения, Истина, "")); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Таймаут)); - ПараметрыФункции.Добавить(?(ИспользуетсяЗащищенноеСоединение, ИмяПараметраЗащищенноеСоединение, "")); - - Конструктор.ДобавитьСтроку("%1 = Новый FTPСоединение(%2);", - ИмяПараметраСоединение, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); - -КонецПроцедуры - -Процедура ВывестиЗаголовки() - - Если Не ОписаниеЗапроса.Заголовки.Количество() Тогда - Возврат; - КонецЕсли; - - Конструктор.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки); + МаксимальнаяДлинаАдресаВКомментарии = 100; - Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл - ПараметрыФункции = Новый Массив(); - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ)); - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение)); + КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество(); + НомерЗапроса = 0; - Конструктор.ДобавитьСтроку("%1.Вставить(%2);", - ИмяПараметраЗаголовки, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); - КонецЦикла; + Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл + + НомерЗапроса = НомерЗапроса + 1; + СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); + ВызванМетодПоТекущемуURL = Ложь; -КонецПроцедуры + Конструктор.ДобавитьПустуюСтроку(); -Процедура ВывестиHTTPЗапрос(СтруктураURL) + Если КоличествоURL > 1 Тогда + Конструктор.ДобавитьКомментарий("Запрос %1. %2", + НомерЗапроса, + Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)); + КонецЕсли; - ПараметрыФункции = Новый Массив; - - АдресРесурсаКод = УниверсальныеБлокиКода.СборкаАдресаРесурса(СтруктураURL, - ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, - ПрочитанныеФайлы); + Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда - Если ПустаяСтрока(АдресРесурсаКод) Тогда - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку("/")); - ИначеЕсли СтрЧислоСтрок(АдресРесурсаКод) > 1 Тогда - Конструктор - .ДобавитьПустуюСтроку() - .ДобавитьСтроку("АдресРесурса = %1;", АдресРесурсаКод); - ПараметрыФункции.Добавить("АдресРесурса"); - Иначе - ПараметрыФункции.Добавить(АдресРесурсаКод); - КонецЕсли; + ДобавитьHTTPСоединение(СтруктураURL); + ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса); - Если ОписаниеЗапроса.Заголовки.Количество() Тогда - ПараметрыФункции.Добавить(ИмяПараметраЗаголовки); - КонецЕсли; + Если Не ВызванМетодПоТекущемуURL Тогда + ДобавитьHTTPЗапрос(СтруктураURL); + ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса); + ДобавитьВызовHTTPМетода(ОписаниеРесурса); + КонецЕсли; - Конструктор.ДобавитьСтроку("%1 = Новый HTTPЗапрос(%2);", - ИмяПараметраHTTPЗапрос, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда -КонецПроцедуры + ДобавитьFTPСоединение(СтруктураURL); + ДобавитьВызовFTPМетода(ОписаниеРесурса, СтруктураURL); -Процедура ДобавитьЧтениеФайлов() - - ТребуетсяЧтениеФайловТелаЗапроса = Не МетодУстановкиТелаЗапроса = "ИзФайла"; + Иначе - ФайлыДляЧтения = Новый Массив(); - Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл + ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); - Если Не (ПередаваемыйФайл.ПрочитатьСодержимое - Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда - Продолжить; КонецЕсли; - Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса - И Не ТребуетсяЧтениеФайловТелаЗапроса Тогда - Продолжить; + Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда + Конструктор.Очистить(); + Возврат; КонецЕсли; - ФайлыДляЧтения.Добавить(ПередаваемыйФайл); - КонецЦикла; - Код = УниверсальныеБлокиКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы); - - Если Не ПустаяСтрока(Код) Тогда - Конструктор - .ДобавитьПустуюСтроку() - .ДобавитьСтроку(Код); - КонецЕсли; - -КонецПроцедуры - -Процедура ДобавитьДанныеЗапроса() - - ТелоЗапросаСтрока = ""; - ТелоЗапроса = УниверсальныеБлокиКода.СборкаДанныхЗапросаВСтроку( - НазначенияПередаваемыхДанных.ТелоЗапроса, - ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, - ПрочитанныеФайлы); - - Если ЗначениеЗаполнено(ТелоЗапроса) Тогда - Если СтрЧислоСтрок(ТелоЗапроса) = 1 Тогда - ТелоЗапросаСтрока = ТелоЗапроса; - Иначе - Конструктор - .ДобавитьПустуюСтроку() - .ДобавитьСтроку("%1 = %2;", ИмяПараметраТелоЗапросаСтрока, ТелоЗапроса); - КонецЕсли; - КонецЕсли; - КонецПроцедуры Процедура ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса) @@ -493,18 +399,89 @@ Структура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 = Истина; + +КонецПроцедуры + Процедура ДобавитьУстановкуТелаЗапроса(ОписаниеРесурса) ДобавитьУстановкуТелаЗапросаТекстовымиДанными(); @@ -554,25 +531,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) Конструктор.ДобавитьПустуюСтроку(); @@ -709,4 +698,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" index 9d9fff3..48aebae 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\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" @@ -23,7 +23,7 @@ #Область ПрограммныйИнтерфейс -// Генерирует программный код 1С из переданного описания запроса +// Генерирует программный код для коннектора из переданного описания запроса // // Параметры: // Описание - см. ОписаниеЗапроса - Описание запроса @@ -41,11 +41,11 @@ КонецЕсли; ОписаниеЗапроса = Описание; - Состояние = НовоеСостояние(); - - ПрочитанныеФайлы.Очистить(); ИсходящиеОшибки = Ошибки; Конструктор = Новый КонструкторПрограммногоКода(); + Состояние = НовоеСостояние(); + + ПрочитанныеФайлы.Очистить(); ДобавитьЗаголовки(); ДобавитьАутентификацию(); @@ -132,47 +132,6 @@ КонецПроцедуры -Процедура ДобавитьЗапросы() - - МаксимальнаяДлинаАдресаВКомментарии = 100; - - КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество(); - НомерЗапроса = 0; - - Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл - - НомерЗапроса = НомерЗапроса + 1; - СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); - Состояние.ВызванМетодПоТекущемуURL = Ложь; - - Если Не ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда - ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема); - ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); - КонецЕсли; - - Конструктор.ДобавитьПустуюСтроку(); - - Если КоличествоURL > 1 Тогда - Конструктор.ДобавитьКомментарий("Запрос %1. %2", - НомерЗапроса, - Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)); - КонецЕсли; - - ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса); - - Если Не Состояние.ВызванМетодПоТекущемуURL Тогда - ДобавитьВызовМетода(ОписаниеРесурса); - КонецЕсли; - - Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда - Конструктор.Очистить(); - Возврат; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - Процедура ДобавитьЗаголовки() Заголовки = ПередаваемыеЗаголовки(); @@ -197,37 +156,10 @@ Конструктор.ДобавитьСтроку("%1.Вставить(%2);", ИмяПараметраЗаголовки, Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); - КонецЦикла; -КонецПроцедуры - -Функция ПередаваемыеЗаголовки() - Заголовки = Новый Соответствие(); - Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл - Если ПередаватьЗаголовок(Заголовок) Тогда - Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение); - КонецЕсли; КонецЦикла; - Возврат Заголовки; -КонецФункции - -Функция ПередаватьЗаголовок(Заголовок) - - Имя = НРег(Заголовок.Ключ); - Значение = НРег(Заголовок.Значение); - Если Имя = "content-type" Тогда - Если Состояние.ПереданоТелоЗапроса - И Значение = "application/x-www-form-urlencoded" Тогда - Возврат Ложь; - КонецЕсли; - ИначеЕсли Имя = "authorization" И СтрНачинаетсяС(Значение, "bearer ") Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции +КонецПроцедуры Процедура ДобавитьЧтениеФайлов() @@ -471,6 +403,47 @@ КонецПроцедуры +Процедура ДобавитьЗапросы() + + МаксимальнаяДлинаАдресаВКомментарии = 100; + + КоличествоURL = ОписаниеЗапроса.АдресаРесурсов.Количество(); + НомерЗапроса = 0; + + Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл + + НомерЗапроса = НомерЗапроса + 1; + СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); + Состояние.ВызванМетодПоТекущемуURL = Ложь; + + Если Не ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда + ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); + КонецЕсли; + + Конструктор.ДобавитьПустуюСтроку(); + + Если КоличествоURL > 1 Тогда + Конструктор.ДобавитьКомментарий("Запрос %1. %2", + НомерЗапроса, + Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)); + КонецЕсли; + + ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса); + + Если Не Состояние.ВызванМетодПоТекущемуURL Тогда + ДобавитьВызовМетода(ОписаниеРесурса); + КонецЕсли; + + Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда + Конструктор.Очистить(); + Возврат; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + Процедура ДобавитьВызовМетода(ОписаниеРесурса, Знач СтруктураURL = Неопределено, Знач ДанныеЗапроса = Неопределено) Если СтруктураURL = Неопределено Тогда @@ -714,6 +687,45 @@ КонецФункции +Функция ПередаваемыеЗаголовки() + Заголовки = Новый Соответствие(); + Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл + Если ПередаватьЗаголовок(Заголовок) Тогда + Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение); + КонецЕсли; + КонецЦикла; + Возврат Заголовки; +КонецФункции + +Функция ПередаватьЗаголовок(Заголовок) + + Имя = НРег(Заголовок.Ключ); + Значение = НРег(Заголовок.Значение); + + Если Имя = "content-type" Тогда + Если Состояние.ПереданоТелоЗапроса + И Значение = "application/x-www-form-urlencoded" Тогда + Возврат Ложь; + КонецЕсли; + ИначеЕсли Имя = "authorization" И СтрНачинаетсяС(Значение, "bearer ") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Функция ПолучитьТокенBearer() + + ЗначениеAuthorization = ОписаниеЗапроса.ЗначениеЗаголовка("Authorization"); + Подстрока = "bearer "; + + Если СтрНачинаетсяС(НРег(ЗначениеAuthorization), Подстрока) Тогда + Возврат СокрЛП(Сред(ЗначениеAuthorization, СтрДлина(Подстрока) + 1)); + КонецЕсли; + +КонецФункции + Функция ПолучитьТипАутентификации() Если ЗначениеЗаполнено(ОписаниеЗапроса.ИмяПользователя) Тогда @@ -732,17 +744,6 @@ Возврат "bearer"; КонецФункции -Функция ПолучитьТокенBearer() - - ЗначениеAuthorization = ОписаниеЗапроса.ЗначениеЗаголовка("Authorization"); - Подстрока = "bearer "; - - Если СтрНачинаетсяС(НРег(ЗначениеAuthorization), Подстрока) Тогда - Возврат СокрЛП(Сред(ЗначениеAuthorization, СтрДлина(Подстрока) + 1)); - КонецЕсли; - -КонецФункции - Функция НовоеСостояние() Результат = Новый Структура(); 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 71e2779..d2ba302 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" @@ -393,13 +393,15 @@ КонецФункции Процедура ПрочитатьПользователя(Команда) + ПользовательИПароль = ЗначениеОпции(Команда, "u"); МассивПодстрок = СтрРазделить(ПользовательИПароль, ":"); ОписаниеЗапроса.ИмяПользователя = МассивПодстрок[0]; Если МассивПодстрок.Количество() = 2 Тогда ОписаниеЗапроса.ПарольПользователя = МассивПодстрок[1]; - КонецЕсли + КонецЕсли; + КонецПроцедуры Процедура ПрочитатьДанныеДляОтправки(Команда) @@ -1175,9 +1177,15 @@ КонецЕсли; Если Не (НРег(АргументыКоманды[0]) = "curl") Тогда + НомерКомандыТекст = ?(КоличествоКоманд > 1, СтрШаблон("#%1 ", НомерКоманды), ""); - Текст = СтрШаблон("Команда %1должна начинаться с ""curl"", но вместо этого начинается с %2", НомерКомандыТекст, АргументыКоманды[0]); + + Текст = СтрШаблон("Команда %1должна начинаться с ""curl"", но вместо этого начинается с %2", + НомерКомандыТекст, + АргументыКоманды[0]); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(Текст)); + КонецЕсли; КонецПроцедуры From aeae929eaedfa135da4933ceab140faec7599c1e Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 23:20:21 +0300 Subject: [PATCH 09/29] =?UTF-8?q?perf:=20=D0=A1=D0=B1=D0=BE=D1=80=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D1=80=D1=83?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D0=9C=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D0=B2=20(#136)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\320\232\320\276\320\264\320\260.os" | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) 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 0611a11..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,26 +1,25 @@ -Перем Результат; // Строка +Перем Результат; // Массив из Строка #Область ПрограммныйИнтерфейс Функция ПолучитьРезультат() Экспорт - Возврат СокрЛП(Результат); + Возврат СокрЛП(СтрСоединить(Результат)); КонецФункции Функция Пустой() Экспорт - Возврат ПустаяСтрока(Результат); + Возврат Результат.Количество() = 0; КонецФункции Функция Очистить() Экспорт - Результат = ""; + Результат.Очистить(); Возврат ЭтотОбъект; КонецФункции Функция ДобавитьСтроку(Строка, Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено) Экспорт - Результат = Результат - + Символы.ПС - + СтрШаблон(Строка, Значение1, Значение2, Значение3); + Результат.Добавить(Символы.ПС); + Результат.Добавить(СтрШаблон(Строка, Значение1, Значение2, Значение3)); Возврат ЭтотОбъект; @@ -34,10 +33,16 @@ КонецФункции Функция ДобавитьПустуюСтроку(ТолькоПриОтсутствии = Истина) Экспорт - Если Прав(Результат, 1) <> Символы.ПС Или Не ТолькоПриОтсутствии Тогда - Результат = Результат + Символы.ПС; + + ИндексПоследнего = Результат.ВГраница(); + + Если ИндексПоследнего >= 0 И Не Результат[ИндексПоследнего] = Символы.ПС + Или Не ТолькоПриОтсутствии Тогда + Результат.Добавить(Символы.ПС); КонецЕсли; + Возврат ЭтотОбъект; + КонецФункции Функция ПараметрыФункцииВСтроку(ПараметрыФункции) Экспорт @@ -104,7 +109,7 @@ #Область СлужебныеПроцедурыИФункции Процедура ПриСозданииОбъекта() - Результат = ""; + Результат = Новый Массив(); КонецПроцедуры Функция ЭкранироватьКавычки(Строка) From 4b8d80fe1cd671a72c440045380f0d81915e0810 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 23:39:48 +0300 Subject: [PATCH 10/29] =?UTF-8?q?refactor:=20=D0=92=D1=8B=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BA=D1=81=D0=B8=20=D0=B2=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\232\320\276\320\264\320\2601\320\241.os" | 24 ++------------- ...65\320\272\321\202\320\276\321\200HTTP.os" | 29 +++---------------- ...21\207\320\265\320\275\320\270\321\217.os" | 12 ++++++++ ...20\270\320\232\320\276\320\264\320\260.os" | 24 +++++++++++++++ 4 files changed, 42 insertions(+), 47 deletions(-) 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 b8853cd..f9ba0f6 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" @@ -277,13 +277,7 @@ Возврат; КонецЕсли; - ДопустимыеПротоколыПрокси = Новый Массив(); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTP); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTPS); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTP); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTPS); - - Если ДопустимыеПротоколыПрокси.Найти(ОписаниеЗапроса.ПроксиПротокол) = Неопределено Тогда + Если Не ОбщегоНазначения.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда ТекстОшибки = СтрШаблон("Прокси протокол %1 не поддерживается", ОписаниеЗапроса.ПроксиПротокол); ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); Возврат; @@ -291,21 +285,7 @@ Конструктор .ДобавитьПустуюСтроку() - .ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметраПрокси); - - ИспользоватьАутентификациюОС = ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM; - - ПараметрыФункции = Новый Массив; - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиПротокол)); - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиСервер)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПорт)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПользователь)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПароль)); - ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина - - Конструктор.ДобавитьСтроку("%1.Установить(%2);", - ИмяПараметраПрокси, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + .ДобавитьСтроку(УниверсальныеБлокиКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси)); КонецПроцедуры 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" index 48aebae..31072d7 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\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" @@ -367,17 +367,11 @@ Процедура ДобавитьПрокси() - Если Не Состояние.ИспользуетсяПрокси Тогда + Если Не ОписаниеЗапроса.ИспользуетсяПрокси() Тогда Возврат; КонецЕсли; - ДопустимыеПротоколыПрокси = Новый Массив(); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTP); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.HTTPS); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTP); - ДопустимыеПротоколыПрокси.Добавить(ПротоколыURL.FTPS); - - Если ДопустимыеПротоколыПрокси.Найти(ОписаниеЗапроса.ПроксиПротокол) = Неопределено Тогда + Если Не ОбщегоНазначения.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда ТекстОшибки = СтрШаблон("Прокси протокол %1 не поддерживается", ОписаниеЗапроса.ПроксиПротокол); ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); Возврат; @@ -385,21 +379,7 @@ Конструктор .ДобавитьПустуюСтроку() - .ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметраПрокси); - - ИспользоватьАутентификациюОС = ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM; - - ПараметрыФункции = Новый Массив; - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиПротокол)); - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиСервер)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПорт)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПользователь)); - ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПароль)); - ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина - - Конструктор.ДобавитьСтроку("%1.Установить(%2);", - ИмяПараметраПрокси, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + .ДобавитьСтроку(УниверсальныеБлокиКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси)); КонецПроцедуры @@ -564,7 +544,7 @@ Процедура ДобавитьПроксиВДополнительныеПараметры(КонструкторДопПараметров) - Если Не Состояние.ИспользуетсяПрокси Тогда + Если Не ОписаниеЗапроса.ИспользуетсяПрокси() Тогда Возврат; КонецЕсли; @@ -747,7 +727,6 @@ Функция НовоеСостояние() Результат = Новый Структура(); - Результат.Вставить("ИспользуетсяПрокси", ОписаниеЗапроса.ИспользуетсяПрокси()); Результат.Вставить("ПереданоТелоЗапроса", ОписаниеЗапроса.ПереданоТелоЗапроса()); Результат.Вставить("ПереданаСтрокаЗапроса", ОписаниеЗапроса.ПереданаСтрокаЗапроса()); Результат.Вставить("ЕстьЗаголовки", Ложь); 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 c120782..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" @@ -34,6 +34,18 @@ КонецФункции +Функция ПротоколПроксиПоддерживатся(Прокси) Экспорт + + ПоддерживаемыеПротоколыПрокси = Новый Массив(); + ПоддерживаемыеПротоколыПрокси.Добавить(Протоколы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" index 63b17db..2ac0d90 100644 --- "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" @@ -239,4 +239,28 @@ КонецФункции +Функция СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметра) Экспорт + + Конструктор = Новый КонструкторПрограммногоКода(); + + ИспользоватьАутентификациюОС = ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM; + + ПараметрыФункции = Новый Массив; + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиПротокол)); + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиСервер)); + ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПорт)); + ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПользователь)); + ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПароль)); + ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина + + Конструктор + .ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметра) + .ДобавитьСтроку("%1.Установить(%2);", + ИмяПараметра, + Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + + Возврат Конструктор.ПолучитьРезультат(); + +КонецФункции + #КонецОбласти \ No newline at end of file From fa53f434657812fc561f43afc69fcb1dec387aa5 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 23:47:48 +0300 Subject: [PATCH 11/29] =?UTF-8?q?refactor:=20=D0=9F=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\320\232\320\276\320\264\320\2601\320\241.os" | 8 ++++---- ...275\320\265\320\272\321\202\320\276\321\200HTTP.os" | 10 +++++----- ...320\263\320\276\320\232\320\276\320\264\320\260.os" | 0 3 files changed, 9 insertions(+), 9 deletions(-) rename "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" => "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" (100%) 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 f9ba0f6..7229ec6 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" @@ -185,7 +185,7 @@ КонецЦикла; - Код = УниверсальныеБлокиКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы); + Код = КоллекцияПрограммногоКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы); Если Не ПустаяСтрока(Код) Тогда Конструктор @@ -198,7 +198,7 @@ Процедура ДобавитьДанныеЗапроса() ТелоЗапросаСтрока = ""; - ТелоЗапроса = УниверсальныеБлокиКода.СборкаДанныхЗапросаВСтроку( + ТелоЗапроса = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку( НазначенияПередаваемыхДанных.ТелоЗапроса, ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, ПрочитанныеФайлы); @@ -285,7 +285,7 @@ Конструктор .ДобавитьПустуюСтроку() - .ДобавитьСтроку(УниверсальныеБлокиКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси)); + .ДобавитьСтроку(КоллекцияПрограммногоКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси)); КонецПроцедуры @@ -419,7 +419,7 @@ ПараметрыФункции = Новый Массив; - АдресРесурсаКод = УниверсальныеБлокиКода.СборкаАдресаРесурса(СтруктураURL, + АдресРесурсаКод = КоллекцияПрограммногоКода.СборкаАдресаРесурса(СтруктураURL, ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, ПрочитанныеФайлы); 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" index 31072d7..d281730 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\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" @@ -175,7 +175,7 @@ КонецЦикла; - Код = УниверсальныеБлокиКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы); + Код = КоллекцияПрограммногоКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы); Если Не ПустаяСтрока(Код) Тогда Конструктор @@ -259,7 +259,7 @@ Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметра, РезультатСборка) - Сборка = УниверсальныеБлокиКода.СборкаДанныхЗапросаВСтроку( + Сборка = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку( НазначениеДанных, ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, ПрочитанныеФайлы); @@ -379,7 +379,7 @@ Конструктор .ДобавитьПустуюСтроку() - .ДобавитьСтроку(УниверсальныеБлокиКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси)); + .ДобавитьСтроку(КоллекцияПрограммногоКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси)); КонецПроцедуры @@ -488,9 +488,9 @@ Если Состояние.ПереданаСтрокаЗапроса И ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда - URLСборка = УниверсальныеБлокиКода.СборкаURL(СтруктураURL); + URLСборка = КоллекцияПрограммногоКода.СборкаURL(СтруктураURL); Иначе - URLСборка = УниверсальныеБлокиКода.СборкаURL(СтруктураURL, + URLСборка = КоллекцияПрограммногоКода.СборкаURL(СтруктураURL, ОписаниеЗапроса.ОтправляемыеТекстовыеДанные, ПрочитанныеФайлы); КонецЕсли; 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\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" similarity index 100% rename from "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" rename to "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" From aa123b857e84390336ac795d0c31623ac460af97 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sat, 18 Jan 2025 23:49:55 +0300 Subject: [PATCH 12/29] =?UTF-8?q?refactor:=20=D0=9F=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D0=9D=D0=B0=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=D0=9F=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B4=D0=B0=D0=B2=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=D0=94?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D1=85POST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\274\320\260\320\275\320\264\321\213CURL.os" | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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 d2ba302..98ab8a9 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" @@ -418,7 +418,7 @@ Процедура ПрочитатьData(Команда) МассивДанных = ЗначениеОпции(Команда, "d"); // -d, --data - Назначение = НазначениеПередаваемыхДанныхPOST(Команда); + Назначение = НазначениеПередаваемыхДанных(Команда); Для Каждого Данные Из МассивДанных Цикл @@ -442,7 +442,7 @@ Процедура ПрочитатьDataRaw(Команда) МассивДанных = ЗначениеОпции(Команда, "data-raw"); - Назначение = НазначениеПередаваемыхДанныхPOST(Команда); + Назначение = НазначениеПередаваемыхДанных(Команда); Для Каждого Данные Из МассивДанных Цикл ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение); @@ -454,7 +454,7 @@ Процедура ПрочитатьDataBinary(Команда) МассивДанных = ЗначениеОпции(Команда, "data-binary"); - Назначение = НазначениеПередаваемыхДанныхPOST(Команда); + Назначение = НазначениеПередаваемыхДанных(Команда); Для Каждого Данные Из МассивДанных Цикл Если Лев(Данные, 1) = "@" Тогда @@ -473,7 +473,7 @@ Процедура ПрочитатьDataUrlencode(Команда) МассивДанных = ЗначениеОпции(Команда, "data-urlencode"); - Назначение = НазначениеПередаваемыхДанныхPOST(Команда); + Назначение = НазначениеПередаваемыхДанных(Команда); Для Каждого Данные Из МассивДанных Цикл ПозицияРавенства = СтрНайти(Данные, "="); @@ -555,7 +555,7 @@ Процедура ПрочитатьОпициюJson(Команда) МассивДанных = ЗначениеОпции(Команда, "json"); - Назначение = НазначениеПередаваемыхДанныхPOST(Команда); + Назначение = НазначениеПередаваемыхДанных(Команда); Для Каждого Данные Из МассивДанных Цикл @@ -752,7 +752,7 @@ КонецПроцедуры -Функция НазначениеПередаваемыхДанныхPOST(Команда) +Функция НазначениеПередаваемыхДанных(Команда) Если ЗначениеОпции(Команда, "get") = Истина Тогда Возврат НазначенияПередаваемыхДанных.СтрокаЗапроса; Иначе @@ -1177,7 +1177,7 @@ КонецЕсли; Если Не (НРег(АргументыКоманды[0]) = "curl") Тогда - + НомерКомандыТекст = ?(КоличествоКоманд > 1, СтрШаблон("#%1 ", НомерКоманды), ""); Текст = СтрШаблон("Команда %1должна начинаться с ""curl"", но вместо этого начинается с %2", From 6154e9d5d5950b783c61f560b11bb23881e69e50 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sun, 19 Jan 2025 19:32:55 +0300 Subject: [PATCH 13/29] =?UTF-8?q?feat:=20=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B9=20-L,?= =?UTF-8?q?=20--location=20=D0=B8=20--no-location=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...65\320\272\321\202\320\276\321\200HTTP.os" | 15 +++++- ...74\320\260\320\275\320\264\321\213CURL.os" | 15 ++++-- ...20\277\321\200\320\276\321\201\320\260.os" | 4 ++ ...\320\276\320\264\320\2601\320\241_test.os" | 14 ++--- ...0\272\321\202\320\276\321\200HTTP_test.os" | 54 ++++++++++++++++--- 5 files changed, 84 insertions(+), 18 deletions(-) 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" index d281730..33f5db0 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\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" @@ -101,7 +101,10 @@ |json |A |user-agent - |oauth2-bearer"; + |oauth2-bearer + |L + |location + |no-location"; Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь); @@ -516,6 +519,7 @@ ДобавитьПроксиВДополнительныеПараметры(КонструкторДопПараметров); ДобавитьСертификатыВДополнительныеПараметры(КонструкторДопПараметров); ДобавитьТаймаутВДополнительныеПараметры(КонструкторДопПараметров); + ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров); ДобавитьПараметрыЗапросаВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса); ДобавитьДанныеВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса, ДанныеЗапроса); @@ -632,6 +636,15 @@ КонецПроцедуры +Процедура ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров) + + Если ОписаниеЗапроса.ЗапретитьПеренаправление Тогда + КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""РазрешитьПеренаправление"", Ложь);", + ИмяПараметраДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + Функция ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(Метод) Возврат Метод = "POST" Или Метод = "PUT" Или Метод = "PATCH" Или Метод = "DELETE"; КонецФункции 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 98ab8a9..4f112c7 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" @@ -134,7 +134,8 @@ ПрочитатьТаймаут(Команда); ПрочитатьТаймаутСоединения(Команда); ПрочитатьРежимСоединенияFTP(Команда); - + ПрочитатьИспользованиеПеренаправлений(Команда); + ДополнитьОшибкиНеподдерживаемыеОпции(Команда); КонецПроцедуры @@ -752,6 +753,13 @@ КонецПроцедуры +Процедура ПрочитатьИспользованиеПеренаправлений(Команда) + + ОписаниеЗапроса.РазрешитьПеренаправление = ПоследнееЗначениеОпции(Команда, "location") = Истина; + ОписаниеЗапроса.ЗапретитьПеренаправление = ПоследнееЗначениеОпции(Команда, "no-location") = Истина; + +КонецПроцедуры + Функция НазначениеПередаваемыхДанных(Команда) Если ЗначениеОпции(Команда, "get") = Истина Тогда Возврат НазначенияПередаваемыхДанных.СтрокаЗапроса; @@ -804,6 +812,8 @@ ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("ftp-pasv", , "Использование пассивного режима ftp-соединения").ТМассивБулево(); ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("P ftp-port", "", "Использование активного режима ftp-соединения").ТМассивСтрок(); ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("l list-only").ТМассивБулево(); + ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("L location", "", "Разрешает перенаправления").ТМассивБулево(); + ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("no-location", "", "Запрещает перенаправления").ТМассивБулево(); // Неподдерживаемые ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("abstract-unix-socket").ТМассивСтрок(); @@ -896,7 +906,6 @@ ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("libcurl").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("limit-rate").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("local-port").ТМассивСтрок(); - ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("L location").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("location-trusted").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("login-options").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("mail-auth").ТМассивСтрок(); @@ -1227,7 +1236,7 @@ Результат = Результат + ?(НомерКоманды > 1, Символы.ПС + Символы.ПС, "") + СтрШаблон( - "////////////////////////////////////////////// + "////////////////////////////////////////////// |// Команда #%1.", НомерКоманды); КонецПроцедуры 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 2692edd..c62690e 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" @@ -20,6 +20,8 @@ Перем ТипАутентификацииПрокси Экспорт; // см. ТипыАутентификацииПрокси Перем FTPПассивныйРежимСоединения Экспорт; // Булево Перем FTPАдресОбратногоСоединения Экспорт; // Строка +Перем РазрешитьПеренаправление Экспорт; // Булево +Перем ЗапретитьПеренаправление Экспорт; // Булево // Максимальное время ожидания на выполнение запроса Перем Таймаут Экспорт; // Число @@ -92,6 +94,8 @@ ТаймаутСоединения = 0; FTPПассивныйРежимСоединения = Ложь; FTPАдресОбратногоСоединения = ""; + РазрешитьПеренаправление = Ложь; + ЗапретитьПеренаправление = Ложь; КонецПроцедуры Функция ЕстьДанныеПоНазначению(Назначение) Экспорт 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 5251905..f673177 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" @@ -531,7 +531,7 @@ |curl http://example1.com --head |curl http://example2.com -X HEAD"; - ПрограммныйКод = "////////////////////////////////////////////// + ПрограммныйКод = "////////////////////////////////////////////// |// Команда #1. | |Соединение = Новый HTTPСоединение(""example1.com"", 80); @@ -539,7 +539,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""HEAD"", HTTPЗапрос); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #2. | |Соединение = Новый HTTPСоединение(""example2.com"", 80); @@ -558,7 +558,7 @@ КонсольнаяКоманда = "curl http://example1.com & curl http://example2.com"; - ПрограммныйКод = "////////////////////////////////////////////// + ПрограммныйКод = "////////////////////////////////////////////// |// Команда #1. | |Соединение = Новый HTTPСоединение(""example1.com"", 80); @@ -566,7 +566,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #2. | |Соединение = Новый HTTPСоединение(""example2.com"", 80); @@ -1299,7 +1299,7 @@ |curl http://example2.com -d 'key=value' |curl http://example3.com"; - ПрограммныйКод = "////////////////////////////////////////////// + ПрограммныйКод = "////////////////////////////////////////////// |// Команда #1. | |Заголовки = Новый Соответствие(); @@ -1310,7 +1310,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #2. | |Заголовки = Новый Соответствие(); @@ -1322,7 +1322,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #3. | |Соединение = Новый HTTPСоединение(""example3.com"", 80); 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" index ddfd8a0..287176e 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\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" @@ -413,12 +413,12 @@ |curl http://example1.com --head |curl http://example2.com -X HEAD"; - ПрограммныйКод = "////////////////////////////////////////////// + ПрограммныйКод = "////////////////////////////////////////////// |// Команда #1. | |Результат = КоннекторHTTP.Head(""http://example1.com""); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #2. | |Результат = КоннекторHTTP.Head(""http://example2.com"");"; @@ -447,12 +447,12 @@ КонсольнаяКоманда = "curl http://example1.com & curl http://example2.com"; - ПрограммныйКод = "////////////////////////////////////////////// + ПрограммныйКод = "////////////////////////////////////////////// |// Команда #1. | |Результат = КоннекторHTTP.Get(""http://example1.com""); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #2. | |Результат = КоннекторHTTP.Get(""http://example2.com"");"; @@ -908,7 +908,7 @@ |curl http://example2.com -d 'key=value' |curl http://example3.com"; - ПрограммныйКод = "////////////////////////////////////////////// + ПрограммныйКод = "////////////////////////////////////////////// |// Команда #1. | |Заголовки = Новый Соответствие(); @@ -919,7 +919,7 @@ | |Результат = КоннекторHTTP.Get(""http://example1.com"", , ДополнительныеПараметры); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #2. | |Данные = Новый Соответствие(); @@ -927,7 +927,7 @@ | |Результат = КоннекторHTTP.Post(""http://example2.com"", Данные); | - |////////////////////////////////////////////// + |////////////////////////////////////////////// |// Команда #3. | |Результат = КоннекторHTTP.Get(""http://example3.com"");"; @@ -954,4 +954,44 @@ Ожидаем.Что(Результат).Равно(ПрограммныйКод); +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПроверитьИспользованиеПеренаправлений() Экспорт + + КонсольнаяКоманда = "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.Конвертировать(КонсольнаяКоманда, Генератор); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + КонецПроцедуры \ No newline at end of file From aea8ecc53a390e0dc90c0ee525fea4f7d51a9ed1 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Sun, 19 Jan 2025 20:02:56 +0300 Subject: [PATCH 14/29] =?UTF-8?q?feat:=20=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9=20--retr?= =?UTF-8?q?y=20=D0=B8=20--retry-max-time=20=D0=B4=D0=BB=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...65\320\272\321\202\320\276\321\200HTTP.os" | 21 +++++++- ...74\320\260\320\275\320\264\321\213CURL.os" | 20 ++++++- ...20\277\321\200\320\276\321\201\320\260.os" | 4 ++ ...0\272\321\202\320\276\321\200HTTP_test.os" | 53 +++++++++++++++++++ 4 files changed, 95 insertions(+), 3 deletions(-) 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" index 33f5db0..e6dd654 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\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" @@ -104,7 +104,9 @@ |oauth2-bearer |L |location - |no-location"; + |no-location + |retry + |retry-max-time"; Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь); @@ -520,6 +522,7 @@ ДобавитьСертификатыВДополнительныеПараметры(КонструкторДопПараметров); ДобавитьТаймаутВДополнительныеПараметры(КонструкторДопПараметров); ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров); + ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров); ДобавитьПараметрыЗапросаВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса); ДобавитьДанныеВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса, ДанныеЗапроса); @@ -645,6 +648,22 @@ КонецПроцедуры +Процедура ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров) + + Если ОписаниеЗапроса.МаксимальноеКоличествоПовторов > 0 Тогда + КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""МаксимальноеКоличествоПовторов"", %2);", + ИмяПараметраДополнительныеПараметры, + Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеКоличествоПовторов)); + КонецЕсли; + + Если ОписаниеЗапроса.МаксимальноеВремяПовторов > 0 Тогда + КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""МаксимальноеВремяПовторов"", %2);", + ИмяПараметраДополнительныеПараметры, + Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеВремяПовторов)); + КонецЕсли; + +КонецПроцедуры + Функция ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(Метод) Возврат Метод = "POST" Или Метод = "PUT" Или Метод = "PATCH" Или Метод = "DELETE"; КонецФункции 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 4f112c7..7f1fa5e 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" @@ -135,6 +135,7 @@ ПрочитатьТаймаутСоединения(Команда); ПрочитатьРежимСоединенияFTP(Команда); ПрочитатьИспользованиеПеренаправлений(Команда); + ПрочитатьПовторныеПопытки(Команда); ДополнитьОшибкиНеподдерживаемыеОпции(Команда); @@ -760,6 +761,21 @@ КонецПроцедуры +Процедура ПрочитатьПовторныеПопытки(Команда) + + МаксимальноеКоличествоПовторов = ПоследнееЗначениеОпции(Команда, "retry"); + МаксимальноеВремяПовторов = ПоследнееЗначениеОпции(Команда, "retry-max-time"); + + Если Не МаксимальноеКоличествоПовторов = Неопределено Тогда + ОписаниеЗапроса.МаксимальноеКоличествоПовторов = МаксимальноеКоличествоПовторов; + КонецЕсли; + + Если Не МаксимальноеВремяПовторов = Неопределено Тогда + ОписаниеЗапроса.МаксимальноеВремяПовторов = МаксимальноеВремяПовторов; + КонецЕсли; + +КонецПроцедуры + Функция НазначениеПередаваемыхДанных(Команда) Если ЗначениеОпции(Команда, "get") = Истина Тогда Возврат НазначенияПередаваемыхДанных.СтрокаЗапроса; @@ -814,6 +830,8 @@ ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("l list-only").ТМассивБулево(); ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("L location", "", "Разрешает перенаправления").ТМассивБулево(); ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("no-location", "", "Запрещает перенаправления").ТМассивБулево(); + ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry", 0, "Количество повторных попыток").ТМассивЧисел(); + ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry-max-time", 0, "Максимальное время повторов").ТМассивЧисел(); // Неподдерживаемые ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("abstract-unix-socket").ТМассивСтрок(); @@ -983,11 +1001,9 @@ ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("remove-on-error").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("request-target").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("resolve").ТМассивСтрок(); - ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-all-errors").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-connrefused").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-delay").ТМассивСтрок(); - ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-max-time").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("sasl-authzid").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("sasl-ir").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("service-name").ТМассивСтрок(); 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 c62690e..b5c7174 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" @@ -22,6 +22,8 @@ Перем FTPАдресОбратногоСоединения Экспорт; // Строка Перем РазрешитьПеренаправление Экспорт; // Булево Перем ЗапретитьПеренаправление Экспорт; // Булево +Перем МаксимальноеКоличествоПовторов Экспорт; // Число +Перем МаксимальноеВремяПовторов Экспорт; // Число // Максимальное время ожидания на выполнение запроса Перем Таймаут Экспорт; // Число @@ -96,6 +98,8 @@ FTPАдресОбратногоСоединения = ""; РазрешитьПеренаправление = Ложь; ЗапретитьПеренаправление = Ложь; + МаксимальноеКоличествоПовторов = 0; + МаксимальноеВремяПовторов = 0; КонецПроцедуры Функция ЕстьДанныеПоНазначению(Назначение) Экспорт 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" index 287176e..b8fcc53 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\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" @@ -994,4 +994,57 @@ Ожидаем.Что(Результат).Равно(ПрограммныйКод); +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПроверитьПовторныеПопытки() Экспорт + + КонсольнаяКоманда = "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"", , ДополнительныеПараметры);"; + + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); + + Ожидаем.Что(Результат).Равно(ПрограммныйКод); + КонецПроцедуры \ No newline at end of file From b28e03cc2d728d75df03d4c22184a81c0e6b808f Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 20 Jan 2025 18:47:40 +0300 Subject: [PATCH 15/29] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B8=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B9=20-F,?= =?UTF-8?q?=20--form,=20--form-string=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D0=BD=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B0=20(#38)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\232\320\276\320\264\320\2601\320\241.os" | 30 ++- ...65\320\272\321\202\320\276\321\200HTTP.os" | 230 ++++++++++++++-- ...74\320\260\320\275\320\264\321\213CURL.os" | 254 ++++++++++++++---- ...20\277\321\200\320\276\321\201\320\260.os" | 6 +- ...36\320\277\321\206\320\270\320\270Form.os" | 165 ++++++++++++ ...20\242\320\265\320\272\321\201\321\202.os" | 49 +++- ...20\271\320\244\320\260\320\271\320\273.os" | 43 ++- ...20\276\320\232\320\276\320\264\320\260.os" | 101 ++++--- ...\320\276\320\264\320\2601\320\241_test.os" | 8 +- ...0\272\321\202\320\276\321\200HTTP_test.os" | 241 ++++++++++++++++- ...0\260\320\275\320\264\321\213CURL_test.os" | 30 +++ 11 files changed, 1020 insertions(+), 137 deletions(-) create mode 100644 "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" 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 7229ec6..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" @@ -166,6 +166,10 @@ Процедура ДобавитьЧтениеФайлов() + Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда + Возврат; + КонецЕсли; + ТребуетсяЧтениеФайловТелаЗапроса = Не МетодУстановкиТелаЗапроса = "ИзФайла"; ФайлыДляЧтения = Новый Массив(); @@ -197,6 +201,10 @@ Процедура ДобавитьДанныеЗапроса() + Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда + Возврат; + КонецЕсли; + ТелоЗапросаСтрока = ""; ТелоЗапроса = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку( НазначенияПередаваемыхДанных.ТелоЗапроса, @@ -344,6 +352,10 @@ Процедура ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса) + Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда + Возврат; + КонецЕсли; + ДлинаИмениФайлаВКомментарии = 100; ВсеФайлы = Новый Массив(); @@ -368,7 +380,7 @@ НомерФайла = НомерФайла + 1; Если КоличествоФайлов > 1 Тогда - ИмяФайла = Лев(ПередаваемыйФайл.ИмяФайла, ДлинаИмениФайлаВКомментарии); + ИмяФайла = Лев(ПередаваемыйФайл.ПолноеИмяФайла, ДлинаИмениФайлаВКомментарии); Конструктор .ДобавитьПустуюСтроку() .ДобавитьКомментарий("Передача файла %1. %2", НомерФайла, ИмяФайла); @@ -376,14 +388,14 @@ СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда - СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ИмяФайла, СтруктураURL.Путь); + СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь); КонецЕсли; ДобавитьHTTPЗапрос(СтруктураURL); Конструктор.ДобавитьСтроку("%1.УстановитьИмяФайлаТела(%2);", ИмяПараметраHTTPЗапрос, - Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла)); + Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)); ДобавитьВызовHTTPМетода(ОписаниеРесурса); @@ -503,7 +515,7 @@ Конструктор.ДобавитьСтроку("%1%2.УстановитьИмяФайлаТела(%3);", ?(ЭтоПервыйФайл, "", "// "), ИмяПараметраHTTPЗапрос, - Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла)); + Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)); ЭтоПервыйФайл = Ложь; @@ -589,13 +601,13 @@ КонецЕсли; Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда - АдресРесурса = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ИмяФайла, СтруктураURL.Путь); + АдресРесурса = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь); Иначе АдресРесурса = СтруктураURL.Путь; КонецЕсли; ПараметрыФункции = Новый Массив; - ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла)); + ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)); ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(АдресРесурса)); Конструктор.ДобавитьСтроку("%1.Записать(%2);", @@ -667,8 +679,10 @@ Прервать; КонецЕсли; КонецЦикла; - - Если КоличествоФайлов > 1 Или ЕстьТекстовоеТелоЗапроса Тогда + + Если ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда + МетодУстановкиТелаЗапроса = ""; + ИначеЕсли КоличествоФайлов > 1 Или ЕстьТекстовоеТелоЗапроса Тогда МетодУстановкиТелаЗапроса = "ИзСтроки"; ИначеЕсли КоличествоФайлов = 1 И Не ЕстьТекстовоеТелоЗапроса Тогда МетодУстановкиТелаЗапроса = "ИзФайла"; 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" index e6dd654..e08c593 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\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" @@ -18,6 +18,7 @@ Перем ИмяПараметраПрокси; // Строка Перем ИмяПараметраДополнительныеПараметры; // Строка Перем ИмяПараметраДанныеЗапроса; // Строка +Перем ИмяПараметраФайлы; // Строка Перем ИмяПараметраПараметрыЗапроса; // Строка Перем ИмяПараметраURL; // Строка @@ -52,6 +53,7 @@ ДобавитьПрокси(); ДобавитьЧтениеФайлов(); ДобавитьДанныеЗапроса(); + ДобавитьФайлы(); ДобавитьПараметрыЗапроса(); ДобавитьЗапросы(); @@ -130,6 +132,7 @@ ИмяПараметраПрокси = "Прокси"; ИмяПараметраДополнительныеПараметры = "ДополнительныеПараметры"; ИмяПараметраДанныеЗапроса = "Данные"; + ИмяПараметраФайлы = "Файлы"; ИмяПараметраПараметрыЗапроса = "ПараметрыЗапроса"; ИмяПараметраURL = "URL"; @@ -202,8 +205,12 @@ Если ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда - ДобавитьТекстовыеДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраДанныеЗапроса); - ДанныеЗапросаСборка = ИмяПараметраДанныеЗапроса; + ДобавитьДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраДанныеЗапроса, ДанныеЗапросаСборка); + + ИначеЕсли ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда + + ТекстОшибки = "Данные формы невозможно передать в структурированный объект для отправки в КоннекторHTTP"; + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка(ТекстОшибки)); Иначе @@ -222,17 +229,29 @@ Возврат; КонецЕсли; - ДобавитьТекстовыеДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраПараметрыЗапроса); + ДобавитьДанныеЗапросаЧерезСоответствие(НазначениеДанных, ИмяПараметраПараметрыЗапроса); КонецПроцедуры -Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСоответствие(Назначение, ИмяПараметра) +Процедура ДобавитьДанныеЗапросаЧерезСоответствие(Назначение, ИмяПараметра, РезультатСборка = "") - РазделительКлючаИЗначения = "="; + КонструкторДанных = Новый КонструкторПрограммногоКода(); - Конструктор - .ДобавитьПустуюСтроку() - .ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметра); + ДобавитьДанныеЗапросаИзТекстовыхДанныхЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра); + ДобавитьДанныеЗапросаИзПрочитанныхФайловЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра); + + Если Не КонструкторДанных.Пустой() Тогда + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметра) + .ДобавитьСтроку(КонструкторДанных.ПолучитьРезультат()); + + РезультатСборка = ИмяПараметра; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьДанныеЗапросаИзТекстовыхДанныхЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра) Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл @@ -240,21 +259,19 @@ Продолжить; КонецЕсли; - ИндексРазделителя = СтрНайти(ПередаваемыйТекст.Значение, РазделительКлючаИЗначения); - - Если ИндексРазделителя > 0 Тогда - Ключ = Сред(ПередаваемыйТекст.Значение, 1, ИндексРазделителя - 1); - Значение = Сред(ПередаваемыйТекст.Значение, ИндексРазделителя + 1); + Если ЗначениеЗаполнено(ПередаваемыйТекст.ИмяПоля) Тогда + Ключ = ПередаваемыйТекст.ИмяПоля; + Значение = ПередаваемыйТекст.Значение; Иначе Ключ = ПередаваемыйТекст.Значение; - Значение = Неопределено; + Значение = ""; КонецЕсли; ПараметрыМетода = Новый Массив(); ПараметрыМетода.Добавить(Конструктор.ПараметрВСтроку(Ключ)); ПараметрыМетода.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Значение)); - Конструктор.ДобавитьСтроку("%1.Вставить(%2);", + КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2);", ИмяПараметра, Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода)); @@ -262,6 +279,76 @@ КонецПроцедуры +Процедура ДобавитьДанныеЗапросаИзПрочитанныхФайловЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра) + + ЗначенияПолей = Новый Соответствие(); + Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл + + ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл; + + Если Не ПередаваемыйФайл.Назначение = Назначение + Или Не ПередаваемыйФайл.ПрочитатьСодержимое Тогда + Продолжить; + КонецЕсли; + + ИмяПоля = ПередаваемыйФайл.ИмяПоля; + Если ЗначенияПолей[ИмяПоля] = Неопределено Тогда + + ЗначенияПолей.Вставить(ИмяПоля, ПрочитанныйФайл.ИмяПеременной); + + ИначеЕсли ТипЗнч(ЗначенияПолей[ИмяПоля]) = Тип("Массив") Тогда + + ЗначенияПолей[ИмяПоля].Добавить(ПрочитанныйФайл.ИмяПеременной); + + Иначе + + МассивЗначений = Новый Массив(); + МассивЗначений.Добавить(ЗначенияПолей[ИмяПоля]); + МассивЗначений.Добавить(ПрочитанныйФайл.ИмяПеременной); + + ЗначенияПолей.Вставить(ИмяПоля, МассивЗначений); + + КонецЕсли; + + КонецЦикла; + + Для Каждого Данные Из ЗначенияПолей Цикл + + ИмяПоля = Данные.Ключ; + + Если ТипЗнч(Данные.Значение) = Тип("Массив") Тогда + + МассивПеременныхФайлов = Данные.Значение; + + КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2, Новый Массив());", + ИмяПараметра, + КонструкторДанных.ПараметрВСтроку(ИмяПоля)); + + Для Каждого ИмяПеременнойФайла Из МассивПеременныхФайлов Цикл + КонструкторДанных.ДобавитьСтроку("%1[%2].Добавить(%3));", + ИмяПараметра, + КонструкторДанных.ПараметрВСтроку(ИмяПоля), + КонструкторДанных.ПараметрВСтроку(ИмяПеременнойФайла)); + КонецЦикла; + + Иначе + + ИмяПеременнойФайла = Данные.Значение; + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(КонструкторДанных.ПараметрВСтроку(ИмяПоля)); + ПараметрыМетода.Добавить(ИмяПеременнойФайла); + + КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2);", + ИмяПараметра, + КонструкторДанных.ПараметрыФункцииВСтроку(ПараметрыМетода)); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметра, РезультатСборка) Сборка = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку( @@ -283,6 +370,71 @@ КонецПроцедуры +Процедура ДобавитьФайлы() + + Если Не ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда + Возврат; + КонецЕсли; + + Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса; + КонструкторФайлов = Новый КонструкторПрограммногоКода(); + + Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл + + Если Не ПередаваемыйФайл.Назначение = Назначение + Или ПередаваемыйФайл.ПрочитатьСодержимое Тогда + Продолжить; + КонецЕсли; + + КонструкторФайлов + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("Файл = Новый Структура();") + .ДобавитьСтроку("Файл.Вставить(""Имя"", %1);", КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ИмяПоля)); + + Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяФайла) Тогда + КонструкторФайлов.ДобавитьСтроку("Файл.Вставить(""ИмяФайла"", %1);", + КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла)); + КонецЕсли; + + КонструкторФайлов.ДобавитьСтроку( + "Файл.Вставить(""Данные"", Новый ДвоичныеДанные(%1));", + КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)); + + Если ЗначениеЗаполнено(ПередаваемыйФайл.ТипMIME) Тогда + КонструкторФайлов.ДобавитьСтроку( + "Файл.Вставить(""Тип"", %1);", + КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ТипMIME)); + КонецЕсли; + + Если ЗначениеЗаполнено(ПередаваемыйФайл.Заголовки) Тогда + КонструкторФайлов.ДобавитьСтроку("Файл.Вставить(""Заголовки"", Новый Соответствие());"); + + Для Каждого Заголовок Из ПередаваемыйФайл.Заголовки Цикл + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(КонструкторФайлов.ПараметрВСтроку(Заголовок.Ключ)); + ПараметрыМетода.Добавить(КонструкторФайлов.ПараметрВСтроку(Заголовок.Значение)); + + КонструкторФайлов.ДобавитьСтроку( + "Файл.Заголовки.Вставить(%1);", + КонструкторФайлов.ПараметрыФункцииВСтроку(ПараметрыМетода)); + КонецЦикла; + КонецЕсли; + + КонструкторФайлов.ДобавитьСтроку("Файлы.Добавить(Файл);"); + + КонецЦикла; + + Если Не КонструкторФайлов.Пустой() Тогда + Состояние.ЕстьФайлыMultipart = Истина; + + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = Новый Массив();", ИмяПараметраФайлы) + .ДобавитьСтроку(КонструкторФайлов.ПолучитьРезультат()); + КонецЕсли; + +КонецПроцедуры + Процедура ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса) ДлинаИмениФайлаВКомментарии = 100; @@ -309,7 +461,7 @@ НомерФайла = НомерФайла + 1; Если КоличествоФайлов > 1 Тогда - ИмяФайла = Лев(ПередаваемыйФайл.ИмяФайла, ДлинаИмениФайлаВКомментарии); + ИмяФайла = Лев(ПередаваемыйФайл.ПолноеИмяФайла, ДлинаИмениФайлаВКомментарии); Конструктор .ДобавитьПустуюСтроку() .ДобавитьКомментарий("Передача файла %1. %2", НомерФайла, ИмяФайла); @@ -317,12 +469,12 @@ СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL); Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда - СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ИмяФайла, СтруктураURL.Путь); + СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь); КонецЕсли; Конструктор.ДобавитьСтроку("%1 = Новый ДвоичныеДанные(%2);", ИмяПараметраДанныеЗапроса, - Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла)); + Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)); ДобавитьВызовМетода(ОписаниеРесурса, СтруктураURL, ИмяПараметраДанныеЗапроса); @@ -525,6 +677,7 @@ ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров); ДобавитьПараметрыЗапросаВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса); ДобавитьДанныеВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса, ДанныеЗапроса); + ДобавитьФайлыВДополнительныеПараметры(КонструкторДопПараметров); Если Не КонструкторДопПараметров.Пустой() Тогда Состояние.ЕстьДополнительныеПараметры = Истина; @@ -639,6 +792,16 @@ КонецПроцедуры +Процедура ДобавитьФайлыВДополнительныеПараметры(КонструкторДопПараметров) + + Если Состояние.ЕстьФайлыMultipart Тогда + КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""Файлы"", %2);", + ИмяПараметраДополнительныеПараметры, + ИмяПараметраФайлы); + КонецЕсли; + +КонецПроцедуры + Процедура ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров) Если ОписаниеЗапроса.ЗапретитьПеренаправление Тогда @@ -674,25 +837,45 @@ Функция ВозможнаПередачаДанныхЧерезСоответствие(Назначение) - РазделительКлючаИЗначения = "="; + ЭтоДанныеMultipart = ОписаниеЗапроса.ОтправлятьКакMultipartFormData + И Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса; Для Каждого ПередаваемыйТекст Из ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл + Если Не ПередаваемыйТекст.Назначение = Назначение Тогда Продолжить; КонецЕсли; + ОтсутствуетИмяПоля = ПередаваемыйТекст.ИмяПоля = ""; + Если ОтсутствуетИмяПоля Тогда + Возврат Ложь; + КонецЕсли; + РазделительОтличенОтАмперсанда = Не ПередаваемыйТекст.РазделительТелаЗапроса = "&"; - ОтсутствуетИмяПараметра = Лев(ПередаваемыйТекст.Значение, 1) = РазделительКлючаИЗначения; - - Если РазделительОтличенОтАмперсанда Или ОтсутствуетИмяПараметра Тогда + Если РазделительОтличенОтАмперсанда И Не ЭтоДанныеMultipart Тогда Возврат Ложь; КонецЕсли; + КонецЦикла; Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл - Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = Назначение Тогда + + ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл; + + Если Не ПередаваемыйФайл.Назначение = Назначение Тогда + Продолжить; + КонецЕсли; + + ОтсутствуетИмяПоля = ПередаваемыйФайл.ИмяПоля = ""; + Если ОтсутствуетИмяПоля Тогда + Возврат Ложь; + КонецЕсли; + + РазделительОтличенОтАмперсанда = Не ПередаваемыйФайл.РазделительТелаЗапроса = "&"; + Если РазделительОтличенОтАмперсанда И Не ЭтоДанныеMultipart Тогда Возврат Ложь; КонецЕсли; + КонецЦикла; Возврат Истина; @@ -762,6 +945,7 @@ Результат.Вставить("ПереданоТелоЗапроса", ОписаниеЗапроса.ПереданоТелоЗапроса()); Результат.Вставить("ПереданаСтрокаЗапроса", ОписаниеЗапроса.ПереданаСтрокаЗапроса()); Результат.Вставить("ЕстьЗаголовки", Ложь); + Результат.Вставить("ЕстьФайлыMultipart", Ложь); Результат.Вставить("ЕстьДополнительныеПараметры", Ложь); Результат.Вставить("ВызванМетодПоТекущемуURL", Ложь); Результат.Вставить("ТипАутентификации", ПолучитьТипАутентификации()); 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 7f1fa5e..ca0cd2a 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" @@ -143,7 +143,7 @@ Процедура ПрочитатьМетодЗапроса(Команда) - ЕстьДанныеPOST = (ЕстьОпцииГруппыData(Команда) ИЛИ ЕстьОпции(команда, "json")); + ЕстьДанныеPOST = ЕстьОпцииГруппыData(Команда) Или ЕстьОпцииГруппыForm(Команда); ЕстьМетодGET = ЗначениеОпции(Команда, "get") = Истина; ЕстьМетодPOST = ЗначениеОпции(Команда, "get") = Ложь И ЕстьДанныеPOST; @@ -408,12 +408,16 @@ Процедура ПрочитатьДанныеДляОтправки(Команда) + ПроверитьДанные(Команда); + ПрочитатьData(Команда); ПрочитатьDataRaw(Команда); ПрочитатьDataBinary(Команда); ПрочитатьDataUrlencode(Команда); ПрочитатьUploadFile(Команда); ПрочитатьОпициюJson(Команда); + ПрочитатьForm(Команда); + ПрочитатьFormString(Команда); КонецПроцедуры @@ -424,7 +428,10 @@ Для Каждого Данные Из МассивДанных Цикл + ПозицияРавенства = СтрНайти(Данные, "="); + Если Лев(Данные, 1) = "@" Тогда + ИмяФайла = Сред(Данные, 2); ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение); @@ -432,9 +439,22 @@ ПередаваемыйФайл.УдалятьПереносыСтрок = Истина; ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл); + + ИначеЕсли ПозицияРавенства > 0 Тогда + + ИмяПоля = Сред(Данные, 1, ПозицияРавенства - 1); + Значение = Сред(Данные, ПозицияРавенства + 1); + + ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение); + ПередаваемыйТекст.ИмяПоля = ИмяПоля; + + ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст); + Иначе + ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение); ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст); + КонецЕсли; КонецЦикла; @@ -478,34 +498,49 @@ Назначение = НазначениеПередаваемыхДанных(Команда); Для Каждого Данные Из МассивДанных Цикл + ПозицияРавенства = СтрНайти(Данные, "="); ПозицияСобачки = СтрНайти(Данные, "@"); + Если ПозицияРавенства > 0 Тогда - Ключ = Сред(Данные, 1, ПозицияРавенства - 1); + + ИмяПоля = Сред(Данные, 1, ПозицияРавенства - 1); Значение = Сред(Данные, ПозицияРавенства + 1); - - Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL); - Если ЗначениеЗаполнено(Ключ) Тогда - Значение = СтрШаблон("%1=%2", Ключ, Значение); + + ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение); + ПередаваемыйТекст.КодироватьЗначение = Истина; + + Если Не ПустаяСтрока(ИмяПоля) Тогда + ПередаваемыйТекст.ИмяПоля = ИмяПоля; КонецЕсли; - ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение); ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст); + ИначеЕсли ПозицияСобачки > 0 Тогда - Ключ = Сред(Данные, 1, ПозицияСобачки - 1); + + ИмяПоля = Сред(Данные, 1, ПозицияСобачки - 1); ИмяФайла = СокрЛП(Сред(Данные, ПозицияСобачки + 1)); ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение); - ПередаваемыйФайл.Ключ = Ключ; + ПередаваемыйФайл.ИмяПоля = ИмяПоля; ПередаваемыйФайл.ПрочитатьСодержимое = Истина; ПередаваемыйФайл.КодироватьСодержимое = Истина; + + Если Не ПустаяСтрока(ИмяПоля) Тогда + ПередаваемыйФайл.ИмяПоля = ИмяПоля; + КонецЕсли; ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл); + Иначе - Значение = КодироватьСтроку(Данные, СпособКодированияСтроки.URLВКодировкеURL); - ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, Назначение); + + ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение); + ПередаваемыйТекст.КодироватьЗначение = Истина; + ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст); + КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -579,6 +614,92 @@ КонецПроцедуры +Процедура Прочитать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"); @@ -628,37 +749,38 @@ КодироватьЗначение = Не НачинаетсяСПлюса; Если ПозицияРавенства > 0 Тогда - Ключ = Сред(Данные, 1, ПозицияРавенства - 1); - ПараметрЗапроса = Сред(Данные, ПозицияРавенства + 1); - Если КодироватьЗначение Тогда - ПараметрЗапроса = КодироватьСтроку(ПараметрЗапроса, СпособКодированияСтроки.URLВКодировкеURL); - КонецЕсли; + ИмяПоля = Сред(Данные, 1, ПозицияРавенства - 1); + Значение = Сред(Данные, ПозицияРавенства + 1); - Если ЗначениеЗаполнено(Ключ) Тогда - ПараметрЗапроса = СтрШаблон("%1=%2", Ключ, ПараметрЗапроса); + ПередаваемыйТекст = Новый ПередаваемыйТекст(Значение, НазначенияПередаваемыхДанных.СтрокаЗапроса); + ПередаваемыйТекст.КодироватьЗначение = КодироватьЗначение; + + Если Не ПустаяСтрока(ИмяПоля) Тогда + ПередаваемыйТекст.ИмяПоля = ИмяПоля; КонецЕсли; - ПередаваемыйТекст = Новый ПередаваемыйТекст(ПараметрЗапроса, НазначенияПередаваемыхДанных.СтрокаЗапроса); ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст); + ИначеЕсли ПозицияСобачки > 0 И Не НачинаетсяСПлюса Тогда - Ключ = Сред(Данные, 1, ПозицияСобачки - 1); + + ИмяПоля = Сред(Данные, 1, ПозицияСобачки - 1); ИмяФайла = СокрЛП(Сред(Данные, ПозицияСобачки + 1)); ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, НазначенияПередаваемыхДанных.СтрокаЗапроса); - ПередаваемыйФайл.Ключ = Ключ; + ПередаваемыйФайл.ИмяПоля = ИмяПоля; ПередаваемыйФайл.ПрочитатьСодержимое = Истина; ПередаваемыйФайл.КодироватьСодержимое = Истина; ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл); + Иначе - ПараметрЗапроса = Данные; - Если КодироватьЗначение Тогда - ПараметрЗапроса = КодироватьСтроку(Данные, СпособКодированияСтроки.URLВКодировкеURL); - КонецЕсли; - ПередаваемыйТекст = Новый ПередаваемыйТекст(ПараметрЗапроса, НазначенияПередаваемыхДанных.СтрокаЗапроса); + ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, НазначенияПередаваемыхДанных.СтрокаЗапроса); + ПередаваемыйТекст.КодироватьЗначение = КодироватьЗначение; + ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст); + КонецЕсли; КонецЦикла; @@ -832,6 +954,8 @@ ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("no-location", "", "Запрещает перенаправления").ТМассивБулево(); ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry", 0, "Количество повторных попыток").ТМассивЧисел(); ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry-max-time", 0, "Максимальное время повторов").ТМассивЧисел(); + ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("F form", "Передаваемые данные по HTTP POST (multipart/form-data)").ТМассивСтрок(); + ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("form-string", "Передаваемые данные по HTTP POST без интерпретации спецтальных сиволов (multipart/form-data)").ТМассивСтрок(); // Неподдерживаемые ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("abstract-unix-socket").ТМассивСтрок(); @@ -881,9 +1005,7 @@ ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("fail-early").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("fail-with-body").ТМассивБулево(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("false-start").ТМассивБулево(); - ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("F form").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("form-escape").ТМассивБулево(); - ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("form-string").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-account").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-alternative-to-user").ТМассивСтрок(); ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("ftp-create-dirs").ТМассивБулево(); @@ -1092,30 +1214,6 @@ Возврат Опция; КонецФункции -Функция ЕстьОпции(Команда, Опции) - Для Каждого Опция Из СтрРазделить(Опции, ",") Цикл - Если ЗначениеЗаполнено(ЗначениеОпции(Команда, Опция)) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; -КонецФункции - -Функция ЕстьОпцииГруппыData(Команда) - Возврат ЕстьОпции(Команда, "d,data,data-raw,data-binary,data-urlencode,data-ascii"); -КонецФункции - -Функция ПоследнееЗначениеОпции(Команда, ИмяОпции) - МассивЗначений = ЗначениеОпции(Команда, ИмяОпции); - Если ТипЗнч(МассивЗначений) = Тип("Массив") И МассивЗначений.Количество() Тогда - Возврат МассивЗначений[МассивЗначений.ВГраница()]; - КонецЕсли; -КонецФункции - -Функция ЗначениеОпции(Команда, ИмяОпции) - Возврат Команда.ЗначениеОпции(ИмяОпции); -КонецФункции - Процедура ОбработатьАргументыКоманды(АргументыКоманды, НомерКоманды, КоличествоКоманд) ПроверитьЧтоКомандаНачинаетсяСCurl(АргументыКоманды, НомерКоманды, КоличествоКоманд); @@ -1243,6 +1341,30 @@ КонецПроцедуры +Процедура ПроверитьДанные(Команда) + + ШаблонОдновременнаяПередача = "Одновременная передача опций %1 и %2 запрещена"; + + Если ЕстьОпцииГруппыData(Команда) И ЕстьОпцииГруппыForm(Команда) Тогда + ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-d (--data)", "-F (--form)"); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); + Возврат; + КонецЕсли; + + Если ЕстьОпцииГруппыForm(Команда) И ЗначениеОпции(Команда, "head") = Истина Тогда + ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-I (--head)", "-F (--form)"); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); + Возврат; + КонецЕсли; + + Если ЕстьОпции(Команда, "upload-file") И ЕстьОпцииГруппыForm(Команда) Тогда + ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-T (--upload-file)", "-F (--form)"); + ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); + Возврат; + КонецЕсли; + +КонецПроцедуры + Процедура ВывестиРазделительКоманд(Результат, НомерКоманды, КоличествоКоманд) Если КоличествоКоманд = 1 Тогда @@ -1271,6 +1393,34 @@ КонецПроцедуры +Функция ЕстьОпции(Команда, Опции) + Для Каждого Опция Из СтрРазделить(Опции, ",") Цикл + Если ЗначениеЗаполнено(ЗначениеОпции(Команда, Опция)) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; +КонецФункции + +Функция ЕстьОпцииГруппыData(Команда) + Возврат ЕстьОпции(Команда, "d,data,data-raw,data-binary,data-urlencode,data-ascii,json"); +КонецФункции + +Функция ЕстьОпцииГруппыForm(Команда) + Возврат ЕстьОпции(Команда, "F,form,form-string"); +КонецФункции + +Функция ПоследнееЗначениеОпции(Команда, ИмяОпции) + МассивЗначений = ЗначениеОпции(Команда, ИмяОпции); + Если ТипЗнч(МассивЗначений) = Тип("Массив") И МассивЗначений.Количество() Тогда + Возврат МассивЗначений[МассивЗначений.ВГраница()]; + КонецЕсли; +КонецФункции + +Функция ЗначениеОпции(Команда, ИмяОпции) + Возврат Команда.ЗначениеОпции(ИмяОпции); +КонецФункции + // Используется для отключения вывода справки cli Процедура Заглушка(Значение = Неопределено) Экспорт 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 b5c7174..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 Перем Заголовки Экспорт; // Соответствие из КлючИЗначение Перем ИмяПользователя Экспорт; // Строка Перем ПарольПользователя Экспорт; // Строка @@ -24,6 +26,7 @@ Перем ЗапретитьПеренаправление Экспорт; // Булево Перем МаксимальноеКоличествоПовторов Экспорт; // Число Перем МаксимальноеВремяПовторов Экспорт; // Число +Перем ОтправлятьКакMultipartFormData Экспорт; // Булево // Максимальное время ожидания на выполнение запроса Перем Таймаут Экспорт; // Число @@ -100,6 +103,7 @@ ЗапретитьПеренаправление = Ложь; МаксимальноеКоличествоПовторов = 0; МаксимальноеВремяПовторов = 0; + ОтправлятьКакMultipartFormData = Ложь; КонецПроцедуры Функция ЕстьДанныеПоНазначению(Назначение) Экспорт 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" index 2ac0d90..a35def5 100644 --- "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" @@ -30,16 +30,11 @@ |%1 = КодироватьСтроку(%1, СпособКодированияСтроки.URLВКодировкеURL);"; КонецЕсли; - Если ЗначениеЗаполнено(ПередаваемыйФайл.Ключ) Тогда - Шаблон = Шаблон + " - |%1 = """ + ПередаваемыйФайл.Ключ + "="" + %1;"; - КонецЕсли; - ИмяПеременной = "ТекстовыеДанныеФайла_" + Формат(НомерФайла, "ЧГ="); Конструктор.ДобавитьСтроку(Шаблон, ИмяПеременной, - Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ИмяФайла)); + Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)); ПрочитанныйФайл = Новый Структура(); ПрочитанныйФайл.Вставить("ПередаваемыйФайл", ПередаваемыйФайл); @@ -76,7 +71,7 @@ МассивТекстовыхДанных.Добавить(Разделитель); КонецЕсли; - МассивТекстовыхДанных.Добавить(ПередаваемыйТекст.Значение); + МассивТекстовыхДанных.Добавить(ПередаваемыйТекст.ПолноеЗначение()); НуженРазделитель = Истина; КонецЦикла; @@ -93,27 +88,36 @@ Продолжить; КонецЕсли; + Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда + Префикс = ПередаваемыйФайл.ИмяПоля + "="; + ПрефиксВКоде = Конструктор.ПараметрВСтроку(Префикс) + " + "; + Иначе + Префикс = ""; + ПрефиксВКоде = ""; + КонецЕсли; + + ИмяПеременной = ПрочитанныйФайл.ИмяПеременной; Разделитель = ПередаваемыйФайл.РазделительТелаЗапроса; Если НуженРазделитель Тогда Если Не ПустаяСтрока(Разделитель) Тогда Текст = СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителя, - ПередаваемыйФайл.РазделительТелаЗапроса, - ПрочитанныйФайл.ИмяПеременной); + ПередаваемыйФайл.РазделительТелаЗапроса + Префикс, + ИмяПеременной); - ЧастиКода.Добавить(Текст); + ЧастиКода.Добавить(Текст); Иначе - Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрочитанныйФайл.ИмяПеременной); + Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрефиксВКоде + ИмяПеременной); ЧастиКода.Добавить(Текст); КонецЕсли; Иначе - ЧастиКода.Добавить(ПрочитанныйФайл.ИмяПеременной); + ЧастиКода.Добавить(ПрефиксВКоде + ИмяПеременной); КонецЕсли; @@ -148,8 +152,10 @@ Функция СборкаАдресаРесурса(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт Конструктор = Новый КонструкторПрограммногоКода(); - КонкатенацияСПереносомСтрокиИАмперсандом = " - | + ""&"" + "; + + РазделительПараметров = "&"; + КонкатенацияСПереносомСтрокиИРазделителем = " + | + ""%1"" + "; КонкатенацияСПереносомСтроки = " | + "; @@ -171,23 +177,43 @@ Если ПараметрыЗапроса.Количество() И Не ПустаяСтрока(ПередаваемыйТекст.РазделительТелаЗапроса) Тогда ПараметрыЗапроса.Добавить(ПередаваемыйТекст.РазделительТелаЗапроса); КонецЕсли; - ПараметрыЗапроса.Добавить(ПередаваемыйТекст.Значение); + ПараметрыЗапроса.Добавить(ПередаваемыйТекст.ПолноеЗначение()); КонецЕсли; КонецЦикла; КонецЕсли; // Параметры запроса из файлов - ПараметрыЗапросаИзФайлов = Новый Массив(); + ПараметрыЗапросаИзФайловСтрокой = ""; Если Не ПрочитанныеФайлы = Неопределено Тогда Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл - Если ПрочитанныйФайл.ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда - ПараметрыЗапросаИзФайлов.Добавить(ПрочитанныйФайл.ИмяПеременной); + + ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл; + + Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда + Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда + Префикс = ПередаваемыйФайл.ИмяПоля + "="; + ПрефиксВКоде = Конструктор.ПараметрВСтроку(Префикс) + " + "; + Иначе + Префикс = ""; + ПрефиксВКоде = ""; + КонецЕсли; + + ИмяПеременной = ПрочитанныйФайл.ИмяПеременной; + + Если ПараметрыЗапросаИзФайловСтрокой = "" Тогда + ПараметрыЗапросаИзФайловСтрокой = ПрефиксВКоде + ИмяПеременной; + Иначе + ПараметрыЗапросаИзФайловСтрокой = ПараметрыЗапросаИзФайловСтрокой + + СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителем, РазделительПараметров + Префикс) + + ИмяПеременной; + КонецЕсли; КонецЕсли; + КонецЦикла; КонецЕсли; + // Сборка адреса ПараметрыЗапросаСтрокой = СтрСоединить(ПараметрыЗапроса); - ПараметрыЗапросаИзФайловСтрокой = СтрСоединить(ПараметрыЗапросаИзФайлов, КонкатенацияСПереносомСтрокиИАмперсандом); ЕстьПараметрыЗапроса = Не ПустаяСтрока(ПараметрыЗапросаСтрокой) Или Не ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой); ПерваяЧасть = СтруктураURL.Путь @@ -206,30 +232,39 @@ Иначе - ВозможноОднойСтрокой = ПустаяСтрока(ВтораяЧасть) - И СтрЧислоСтрок(ПараметрыЗапросаИзФайловСтрокой) = 1; + ВозможноОднойСтрокой = ПустаяСтрока(ВтораяЧасть) И СтрЧислоСтрок(ПараметрыЗапросаИзФайловСтрокой) = 1; Если ВозможноОднойСтрокой Тогда Результат = "" - + Конструктор.ПараметрВСтроку(ПерваяЧасть + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), "", "&")) + + Конструктор.ПараметрВСтроку(ПерваяЧасть + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), "", РазделительПараметров)) + " + " + ПараметрыЗапросаИзФайловСтрокой; Иначе - Результат = "" - + Конструктор.ПараметрВСтроку(ПерваяЧасть) - - + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), - КонкатенацияСПереносомСтроки, - КонкатенацияСПереносомСтрокиИАмперсандом) - - + ПараметрыЗапросаИзФайловСтрокой + Результат = Конструктор.ПараметрВСтроку(ПерваяЧасть); + + Если ПустаяСтрока(ПараметрыЗапросаСтрокой) Тогда + Результат = Результат + + КонкатенацияСПереносомСтроки + + ПараметрыЗапросаИзФайловСтрокой; + ИначеЕсли Лев(ПараметрыЗапросаИзФайловСтрокой, 1) = """" Тогда + Результат = Результат + + КонкатенацияСПереносомСтроки + + """" + РазделительПараметров + + Сред(ПараметрыЗапросаИзФайловСтрокой, 2); + Иначе + Результат = Результат + + СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителем, РазделительПараметров) + + ПараметрыЗапросаИзФайловСтрокой; + КонецЕсли; - + ?(Не ПустаяСтрока(ВтораяЧасть), - КонкатенацияСПереносомСтроки + Конструктор.ПараметрВСтроку(ВтораяЧасть), - ""); + Если Не ПустаяСтрока(ВтораяЧасть) Тогда + Результат = Результат + + КонкатенацияСПереносомСтроки + + Конструктор.ПараметрВСтроку(ВтораяЧасть); + КонецЕсли; КонецЕсли; 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 f673177..29f17dd 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" @@ -387,14 +387,13 @@ |ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); - |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1; | |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); | |ТелоЗапроса = ""name=val&encodethis%26"" - | + ""&"" + ТекстовыеДанныеФайла_1 + | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | |Соединение = Новый HTTPСоединение(""example.com"", 80); @@ -748,7 +747,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' \ @@ -757,7 +756,6 @@ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); - |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1; | |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); @@ -766,7 +764,7 @@ |Соединение = Новый HTTPСоединение(""example.com"", 80); | |АдресРесурса = ""?name=val&encodethis%26&name=%20foo&@not-a-file"" - | + ""&"" + ТекстовыеДанныеФайла_1 + | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); | 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" index b8fcc53..f5efc9d 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\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" @@ -294,14 +294,13 @@ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); - |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1; | |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); | |Данные = ""name=val&encodethis%26"" - | + ""&"" + ТекстовыеДанныеФайла_1 + | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; @@ -530,7 +529,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' \ @@ -539,14 +538,13 @@ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); - |ТекстовыеДанныеФайла_1 = ""name="" + ТекстовыеДанныеФайла_1; | |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); | |URL = ""http://example.com?name=val&encodethis%26&name=%20foo&@not-a-file"" - | + ""&"" + ТекстовыеДанныеФайла_1 + | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | |Результат = КоннекторHTTP.Get(URL);"; @@ -1047,4 +1045,237 @@ Ожидаем.Что(Результат).Равно(ПрограммныйКод); +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПроверитьПроверитьПередачуДанных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= Date: Mon, 20 Jan 2025 20:54:57 +0300 Subject: [PATCH 16/29] =?UTF-8?q?test:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B8=20=D0=BD=D0=B0=20=D0=BE=D1=82=D1=81=D1=83?= =?UTF-8?q?=D1=82=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\276\320\264\320\2601\320\241_test.os" | 273 +++++------------- ...0\272\321\202\320\276\321\200HTTP_test.os" | 189 ++++-------- 2 files changed, 131 insertions(+), 331 deletions(-) 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 29f17dd..d437aff 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" @@ -30,10 +30,8 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); - Ожидаем.Что(Результат).Равно(ПрограммныйКод); - КонецПроцедуры &Тест @@ -57,9 +55,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -73,9 +69,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -89,9 +83,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -135,9 +127,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -173,9 +163,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -193,9 +181,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -224,9 +210,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -241,9 +225,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -266,9 +248,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -320,9 +300,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""PUT"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -344,9 +322,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -366,9 +342,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -402,9 +376,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -440,9 +412,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -465,9 +435,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -488,9 +456,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -517,9 +483,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -546,9 +510,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""HEAD"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -573,9 +535,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -589,9 +549,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -607,9 +565,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -632,9 +588,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -657,9 +611,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -676,9 +628,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -695,9 +645,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -715,9 +663,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -736,9 +682,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -770,9 +714,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -790,9 +732,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -812,9 +752,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -828,9 +766,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""file.html"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -853,9 +789,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""page2.html"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -885,9 +819,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -917,9 +849,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""index.html"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -953,9 +883,7 @@ |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/file.html"");"; ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути()); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -973,9 +901,7 @@ |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос, ""/some/path/about.html"");"; ПрограммныйКод = СтрЗаменить(ПрограммныйКод, "/some/path/", КаталогСохраненияОС + ПолучитьРазделительПути()); - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -992,9 +918,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1018,9 +942,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1039,9 +961,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1060,9 +980,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1092,9 +1010,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1108,9 +1024,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1138,9 +1052,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1159,9 +1071,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1182,9 +1092,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1211,9 +1119,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1230,9 +1136,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1249,9 +1153,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1265,9 +1167,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1284,9 +1184,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1328,9 +1226,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1347,9 +1243,7 @@ | |HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1362,9 +1256,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1379,9 +1271,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1394,9 +1284,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1412,9 +1300,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1427,9 +1313,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1442,9 +1326,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1477,9 +1359,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1497,9 +1377,7 @@ | |Соединение.Получить(""/file.txt"", ""path/to/file"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1512,9 +1390,7 @@ | |Соединение.Записать(""path/to/file.txt"", ""/newfile.txt"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1527,9 +1403,7 @@ | |Соединение.Записать(""path/to/file.txt"", ""/file.txt"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1542,9 +1416,7 @@ | |Соединение.Записать(""path/to/file.txt"", ""/dir/file.txt"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1557,9 +1429,7 @@ | |Файлы = Соединение.НайтиФайлы(""/dir"", ""*"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1572,8 +1442,17 @@ | |Файл = Соединение.НайтиФайлы(""/dir/file.txt"")[0];"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); + +КонецПроцедуры + +Процедура ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод) + + Ошибки = Неопределено; + + Результат = КонвертерКоманды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" index f5efc9d..3807be1 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\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" @@ -30,9 +30,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -57,9 +55,7 @@ | |Результат = КоннекторHTTP.Get(""http://example2.com/page2"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -70,9 +66,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Post(""http://example.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -88,9 +82,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -127,9 +119,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -154,9 +144,7 @@ |// Запрос 2. http://example2.com |Результат = КоннекторHTTP.Post(""http://example2.com"", Данные);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -170,9 +158,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ТекстовыеДанныеФайла_1);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -194,9 +180,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -208,9 +192,7 @@ ПрограммныйКод = "Данные = Новый ДвоичныеДанные(""path/to/file.txt""); |Результат = КоннекторHTTP.Put(""http://example.com/file.txt"", Данные);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -227,9 +209,7 @@ |Данные = Новый ДвоичныеДанные(""path/to/file2.txt""); |Результат = КоннекторHTTP.Put(""http://example.com/file2.txt"", Данные);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -276,9 +256,7 @@ |// Запрос 2. http://example2.com |Результат = КоннекторHTTP.Get(""http://example2.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -305,9 +283,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -331,9 +307,7 @@ |// Запрос 4. http://example4.com |Результат = КоннекторHTTP.Get(""http://example4.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -353,9 +327,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com?param1=value¶m2=value2&"" + ТекстовыеДанныеФайла_1);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -373,9 +345,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -399,9 +369,7 @@ | |Результат = КоннекторHTTP.Get(URL);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -422,9 +390,7 @@ | |Результат = КоннекторHTTP.Head(""http://example2.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -435,9 +401,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Options(""http://example.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -456,9 +420,7 @@ | |Результат = КоннекторHTTP.Get(""http://example2.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -469,9 +431,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -485,9 +445,7 @@ | |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -501,9 +459,7 @@ | |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -518,9 +474,7 @@ | |Результат = КоннекторHTTP.Get(""https://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -549,9 +503,7 @@ | |Результат = КоннекторHTTP.Get(URL);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -566,9 +518,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -592,9 +542,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ТекстовыеДанныеФайла_1, ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -611,9 +559,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -637,9 +583,7 @@ | |Результат = КоннекторHTTP.Get(""http://example2.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -658,9 +602,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -679,9 +621,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -711,9 +651,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -724,9 +662,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -753,9 +689,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные, ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -773,9 +707,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -795,9 +727,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", ""{""""drink"""": """"coffe""""}"", ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -823,9 +753,7 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные, ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -842,9 +770,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -861,9 +787,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -874,9 +798,7 @@ ПрограммныйКод = "Результат = КоннекторHTTP.Get(""http://example.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -893,9 +815,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -930,9 +850,7 @@ | |Результат = КоннекторHTTP.Get(""http://example3.com"");"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -948,9 +866,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -988,9 +904,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1041,9 +955,7 @@ | |Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); - - Ожидаем.Что(Результат).Равно(ПрограммныйКод); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); КонецПроцедуры @@ -1274,8 +1186,17 @@ | |Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"; - Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); + ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод); + +КонецПроцедуры + +Процедура ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод) + + Ошибки = Неопределено; + + Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки); Ожидаем.Что(Результат).Равно(ПрограммныйКод); - + Ожидаем.Что(Ошибки).Не_().Заполнено(); + КонецПроцедуры \ No newline at end of file From 1fc1f3a8ed993d0a7755196d8c1f5bed3c86450b Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 20 Jan 2025 20:55:20 +0300 Subject: [PATCH 17/29] =?UTF-8?q?fix:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D1=81=D1=83=D1=82?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B8=D1=85=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC?= =?UTF-8?q?=D1=8B=D1=85=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\320\275\320\265\320\272\321\202\320\276\321\200HTTP.os" | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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" index e08c593..2638294 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\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" @@ -108,7 +108,10 @@ |location |no-location |retry - |retry-max-time"; + |retry-max-time + |F + |form + |form-string"; Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь); From a33d06b8699b306ca21a596ffb9a7e54b54df709 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 20 Jan 2025 21:17:45 +0300 Subject: [PATCH 18/29] =?UTF-8?q?fix:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF=D0=BE=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\276\320\232\320\276\320\264\320\260.os" | 6 +++--- ...2\320\276\320\264\320\2601\320\241_test.os" | 18 +++++++++--------- ...20\272\321\202\320\276\321\200HTTP_test.os" | 18 +++++++++--------- 3 files changed, 21 insertions(+), 21 deletions(-) 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" index a35def5..7b05c03 100644 --- "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" @@ -27,7 +27,7 @@ Если ПередаваемыйФайл.КодироватьСодержимое Тогда Шаблон = Шаблон + " - |%1 = КодироватьСтроку(%1, СпособКодированияСтроки.URLВКодировкеURL);"; + |%1 = КодироватьСтроку(%1, СпособКодированияСтроки.КодировкаURL);"; КонецЕсли; ИмяПеременной = "ТекстовыеДанныеФайла_" + Формат(НомерФайла, "ЧГ="); @@ -164,8 +164,8 @@ // Исходные параметры запроса Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл КлючИЗначение = СтрШаблон("%1=%2", - Параметр.Ключ, - КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.URLВКодировкеURL)); + КодироватьСтроку(Параметр.Ключ, СпособКодированияСтроки.КодировкаURL), + КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL)); ПараметрыЗапроса.Добавить(КлючИЗначение); КонецЦикла; 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 d437aff..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" @@ -351,7 +351,7 @@ КонсольнаяКоманда = "curl http://example.com \ | --data-urlencode name=val \ - | --data-urlencode '=encodethis&' \ + | --data-urlencode '=encodethis=&' \ | --data-urlencode name@file \ | --data-urlencode @fileonly"; @@ -360,13 +360,13 @@ | |ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL); | |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.КодировкаURL); | - |ТелоЗапроса = ""name=val&encodethis%26"" + |ТелоЗапроса = ""name=val&encodethis%3D%26"" | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | @@ -691,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' \ @@ -699,15 +699,15 @@ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_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"" + |АдресРесурса = ""?name=val&encodethis%3D%26&name=%20foo&@not-a-file"" | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; |HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); @@ -725,7 +725,7 @@ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL); | |Соединение = Новый HTTPСоединение(""example.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""?"" + ТекстовыеДанныеФайла_1); 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" index 3807be1..1737d8c 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\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" @@ -265,19 +265,19 @@ КонсольнаяКоманда = "curl http://example.com \ | --data-urlencode name=val \ - | --data-urlencode '=encodethis&' \ + | --data-urlencode '=encodethis=&' \ | --data-urlencode name@file \ | --data-urlencode @fileonly"; ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL); | |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.КодировкаURL); | - |Данные = ""name=val&encodethis%26"" + |Данные = ""name=val&encodethis%3D%26"" | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | @@ -483,7 +483,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' \ @@ -491,13 +491,13 @@ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL); | |ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_2 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_2 = КодироватьСтроку(ТекстовыеДанныеФайла_2, СпособКодированияСтроки.КодировкаURL); | - |URL = ""http://example.com?name=val&encodethis%26&name=%20foo&@not-a-file"" + |URL = ""http://example.com?name=val&encodethis%3D%26&name=%20foo&@not-a-file"" | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | @@ -514,7 +514,7 @@ ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""fileonly""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); - |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.URLВКодировкеURL); + |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL); | |Результат = КоннекторHTTP.Get(""http://example.com?"" + ТекстовыеДанныеФайла_1);"; From 2c202870c5e202cd5992b3477dc6f8686ed501ec Mon Sep 17 00:00:00 2001 From: Gleb Bogachev Date: Mon, 20 Jan 2025 22:22:01 +0400 Subject: [PATCH 19/29] =?UTF-8?q?feat(web):=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20connector=20(#127)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/view/index.html | 291 ++++++++++++++++++++++------------ 1 file changed, 194 insertions(+), 97 deletions(-) diff --git a/src/interface/view/index.html b/src/interface/view/index.html index ad7a840..dbdce34 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 +495,5 @@

+ \ No newline at end of file From 2b651ff20722f483a9003841432def9537bf062d Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 20 Jan 2025 22:04:58 +0300 Subject: [PATCH 20/29] =?UTF-8?q?refactor:=20=D0=A3=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20=D1=81?= =?UTF-8?q?=20=D0=BE=D0=BF=D1=86=D0=B8=D1=8F=D0=BC=D0=B8=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...74\320\260\320\275\320\264\321\213CURL.os" | 956 ++++++++++-------- ...41\320\260\320\271\321\202\320\260Curl.os" | 2 +- 2 files changed, 547 insertions(+), 411 deletions(-) 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 ca0cd2a..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" @@ -7,6 +7,7 @@ // * КритичнаяОшибка - Булево - Признак критичиной ошибки Перем Генератор; // Объект генератора программного кода Перем КонсольноеПриложение; // см. КонсольноеПриложение +Перем ТекущаяКоманда; // см. КомандаПриложения Перем ОписаниеОпций; // Соответствие Перем КаталогСохраненияФайлов; // Строка @@ -117,48 +118,50 @@ Процедура ОбработатьКоманду(Команда) Экспорт - ПрочитатьКаталогСохраненияФайлов(Команда); - ПрочитатьАдресаРесурсов(Команда); - ПрочитатьИменаВыходныхФайлов(Команда); - ПрочитатьЗаголовки(Команда); - ПрочитатьПользователя(Команда); - ПрочитатьДанныеДляОтправки(Команда); - ПрочитатьМетодЗапроса(Команда); - ПрочитатьСертификатКлиента(Команда); - ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС(Команда); - ПрочитатьИмяФайлаСертификатовУЦ(Команда); - ПрочитатьПараметрыЗапросаURL(Команда); - ПрочитатьАдресПрокси(Команда); - ПрочитатьПользователяПрокси(Команда); - ПрочитатьТипАутентификацииПрокси(Команда); - ПрочитатьТаймаут(Команда); - ПрочитатьТаймаутСоединения(Команда); - ПрочитатьРежимСоединенияFTP(Команда); - ПрочитатьИспользованиеПеренаправлений(Команда); - ПрочитатьПовторныеПопытки(Команда); - - ДополнитьОшибкиНеподдерживаемыеОпции(Команда); + ТекущаяКоманда = Команда; + + ПрочитатьКаталогСохраненияФайлов(); + ПрочитатьАдресаРесурсов(); + ПрочитатьИменаВыходныхФайлов(); + ПрочитатьЗаголовки(); + ПрочитатьПользователя(); + ПрочитатьДанныеДляОтправки(); + ПрочитатьМетодЗапроса(); + ПрочитатьСертификатКлиента(); + ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС(); + ПрочитатьИмяФайлаСертификатовУЦ(); + ПрочитатьПараметрыЗапросаURL(); + ПрочитатьАдресПрокси(); + ПрочитатьПользователяПрокси(); + ПрочитатьТипАутентификацииПрокси(); + ПрочитатьТаймаут(); + ПрочитатьТаймаутСоединения(); + ПрочитатьРежимСоединенияFTP(); + ПрочитатьИспользованиеПеренаправлений(); + ПрочитатьПовторныеПопытки(); + + ДополнитьОшибкиНеподдерживаемыеОпции(); КонецПроцедуры -Процедура ПрочитатьМетодЗапроса(Команда) +Процедура ПрочитатьМетодЗапроса() - ЕстьДанныеPOST = ЕстьОпцииГруппыData(Команда) Или ЕстьОпцииГруппыForm(Команда); + ЕстьДанные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"); Если ЗначениеЗаполнено(Метод) Тогда - ОписаниеРесурса.Метод = Метод; + ОписаниеРесурса.Метод = ВРег(Метод); Продолжить; КонецЕсли; @@ -202,7 +205,7 @@ Метод = "STOR"; // Залить файл ИначеЕсли ЕстьМетодHEAD Тогда Метод = "HEAD"; - ИначеЕсли ПоследнееЗначениеОпции(Команда, "list-only") = Истина Тогда + ИначеЕсли УстановленФлагОпции("list-only") Тогда Метод = "NLST"; // Список имен файлов в директории Иначе Метод = "RETR"; // Скачать файл @@ -215,11 +218,11 @@ КонецПроцедуры -Процедура ПрочитатьАдресаРесурсов(Команда) +Процедура ПрочитатьАдресаРесурсов() МассивURL = Новый Массив; - ОбщегоНазначения.ДополнитьМассив(МассивURL, Команда.ЗначениеАргумента("URL")); - ОбщегоНазначения.ДополнитьМассив(МассивURL, ЗначениеОпции(Команда, "url")); + ОбщегоНазначения.ДополнитьМассив(МассивURL, ТекущаяКоманда.ЗначениеАргумента("URL")); + ОбщегоНазначения.ДополнитьМассив(МассивURL, ЗначениеОпции("url")); Для Каждого URL Из МассивURL Цикл ОписаниеЗапроса.ДобавитьАдресРесурса(URL); @@ -227,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) не поддерживается"; @@ -301,23 +304,23 @@ КонецПроцедуры -Процедура ПрочитатьЗаголовки(Команда) +Процедура ПрочитатьЗаголовки() - Заголовки = РазобратьЗаголовки(Команда); + Заголовки = РазобратьЗаголовки(); Для Каждого Заголовок Из Заголовки Цикл ОписаниеЗапроса.ДобавитьЗаголовок(Заголовок.Ключ, Заголовок.Значение); КонецЦикла; - ДополнитьЗаголовкиJson(Команда); - ДополнитьЗаголовкиПриНаличииОпцииГруппыData(Команда); - ДополнитьЗаголовокUserAgent(Команда); - ДополнитьЗаголовокAuthorizationBearerToken(Команда); + ДополнитьЗаголовкиJson(); + ДополнитьЗаголовкиПриНаличииОпцииГруппыData(); + ДополнитьЗаголовокUserAgent(); + ДополнитьЗаголовокAuthorizationBearerToken(); КонецПроцедуры -Процедура ДополнитьЗаголовкиJson(Команда) +Процедура ДополнитьЗаголовкиJson() - Если Не ЕстьОпции(Команда, "json") Тогда + Если Не ЕстьОпции("json") Тогда Возврат; КонецЕсли; @@ -331,17 +334,17 @@ КонецПроцедуры -Процедура ДополнитьЗаголовкиПриНаличииОпцииГруппыData(Команда) - Если ЕстьОпцииГруппыData(Команда) - И ЗначениеОпции(Команда, "get") = Ложь +Процедура ДополнитьЗаголовкиПриНаличииОпцииГруппыData() + Если ЕстьОпцииГруппыData() + И Не УстановленФлагОпции("get") И Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Content-Type")) Тогда ОписаниеЗапроса.ДобавитьЗаголовок("Content-Type", "application/x-www-form-urlencoded"); КонецЕсли; КонецПроцедуры -Процедура ДополнитьЗаголовокUserAgent(Команда) +Процедура ДополнитьЗаголовокUserAgent() - UserAgent = ПоследнееЗначениеОпции(Команда, "user-agent"); + UserAgent = ПоследнееЗначениеОпции("user-agent"); Если UserAgent = Неопределено Или СтрДлина(UserAgent) = 0 Тогда Возврат; @@ -359,11 +362,11 @@ КонецПроцедуры -Процедура ДополнитьЗаголовокAuthorizationBearerToken(Команда) +Процедура ДополнитьЗаголовокAuthorizationBearerToken() - Токен = ПоследнееЗначениеОпции(Команда, "oauth2-bearer"); + Токен = ПоследнееЗначениеОпции("oauth2-bearer"); - Если ПустаяСтрока(Токен) Тогда + Если Токен = Неопределено Тогда Возврат; КонецЕсли; @@ -371,10 +374,10 @@ КонецПроцедуры -Функция РазобратьЗаголовки(Команда) +Функция РазобратьЗаголовки() Заголовки = Новый Соответствие; - МассивЗаголовков = ЗначениеОпции(Команда, "H"); + МассивЗаголовков = ЗначениеОпции("H"); Для Каждого Строка Из МассивЗаголовков Цикл Имя = ""; Значение = ""; @@ -394,9 +397,14 @@ КонецФункции -Процедура ПрочитатьПользователя(Команда) +Процедура ПрочитатьПользователя() + + ПользовательИПароль = ПоследнееЗначениеОпции("u"); + + Если ПользовательИПароль = Неопределено Тогда + Возврат; + КонецЕсли; - ПользовательИПароль = ЗначениеОпции(Команда, "u"); МассивПодстрок = СтрРазделить(ПользовательИПароль, ":"); ОписаниеЗапроса.ИмяПользователя = МассивПодстрок[0]; @@ -406,25 +414,25 @@ КонецПроцедуры -Процедура ПрочитатьДанныеДляОтправки(Команда) +Процедура ПрочитатьДанныеДляОтправки() - ПроверитьДанные(Команда); + ПроверитьДанные(); - ПрочитатьData(Команда); - ПрочитатьDataRaw(Команда); - ПрочитатьDataBinary(Команда); - ПрочитатьDataUrlencode(Команда); - ПрочитатьUploadFile(Команда); - ПрочитатьОпициюJson(Команда); - ПрочитатьForm(Команда); - ПрочитатьFormString(Команда); + ПрочитатьData(); + ПрочитатьDataRaw(); + ПрочитатьDataBinary(); + ПрочитатьDataUrlencode(); + ПрочитатьUploadFile(); + ПрочитатьОпициюJson(); + ПрочитатьForm(); + ПрочитатьFormString(); КонецПроцедуры -Процедура ПрочитатьData(Команда) +Процедура ПрочитатьData() - МассивДанных = ЗначениеОпции(Команда, "d"); // -d, --data - Назначение = НазначениеПередаваемыхДанных(Команда); + МассивДанных = ЗначениеОпции("d"); // -d, --data + Назначение = НазначениеПередаваемыхДанных(); Для Каждого Данные Из МассивДанных Цикл @@ -461,10 +469,10 @@ КонецПроцедуры -Процедура ПрочитатьDataRaw(Команда) +Процедура ПрочитатьDataRaw() - МассивДанных = ЗначениеОпции(Команда, "data-raw"); - Назначение = НазначениеПередаваемыхДанных(Команда); + МассивДанных = ЗначениеОпции("data-raw"); + Назначение = НазначениеПередаваемыхДанных(); Для Каждого Данные Из МассивДанных Цикл ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение); @@ -473,10 +481,10 @@ КонецПроцедуры -Процедура ПрочитатьDataBinary(Команда) +Процедура ПрочитатьDataBinary() - МассивДанных = ЗначениеОпции(Команда, "data-binary"); - Назначение = НазначениеПередаваемыхДанных(Команда); + МассивДанных = ЗначениеОпции("data-binary"); + Назначение = НазначениеПередаваемыхДанных(); Для Каждого Данные Из МассивДанных Цикл Если Лев(Данные, 1) = "@" Тогда @@ -492,10 +500,10 @@ КонецПроцедуры -Процедура ПрочитатьDataUrlencode(Команда) +Процедура ПрочитатьDataUrlencode() - МассивДанных = ЗначениеОпции(Команда, "data-urlencode"); - Назначение = НазначениеПередаваемыхДанных(Команда); + МассивДанных = ЗначениеОпции("data-urlencode"); + Назначение = НазначениеПередаваемыхДанных(); Для Каждого Данные Из МассивДанных Цикл @@ -545,9 +553,9 @@ КонецПроцедуры -Процедура ПрочитатьUploadFile(Команда) +Процедура ПрочитатьUploadFile() - МассивДанных = ЗначениеОпции(Команда, "T"); // -T, --upload-file + МассивДанных = ЗначениеОпции("T"); // -T, --upload-file ФигурныеСкобки = "{}"; Индекс = -1; @@ -571,7 +579,9 @@ ЗначениеБезСкобок = Сред(Значение, 2, СтрДлина(Значение) - 2); МассивФайлов = СтрРазделить(ЗначениеБезСкобок, ","); ИначеЕсли СтрНайти(ФигурныеСкобки, ПервыйСимвол) Или СтрНайти(ФигурныеСкобки, ПоследнийСимвол) Тогда - ТекстОшибки = СтрШаблон("Неправильное использование фигурных скобок в значении '%1' опции -T, --upload-file", Значение); + ТекстОшибки = СтрШаблон( + "Неправильное использование фигурных скобок в значении '%1' опции -T, --upload-file", + Значение); ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); МассивФайлов.Добавить(Значение); Иначе @@ -589,10 +599,10 @@ КонецПроцедуры -Процедура ПрочитатьОпициюJson(Команда) +Процедура ПрочитатьОпициюJson() - МассивДанных = ЗначениеОпции(Команда, "json"); - Назначение = НазначениеПередаваемыхДанных(Команда); + МассивДанных = ЗначениеОпции("json"); + Назначение = НазначениеПередаваемыхДанных(); Для Каждого Данные Из МассивДанных Цикл @@ -614,9 +624,9 @@ КонецПроцедуры -Процедура ПрочитатьForm(Команда) +Процедура ПрочитатьForm() - МассивДанных = ЗначениеОпции(Команда, "form"); // -f, --Form + МассивДанных = ЗначениеОпции("form"); // -f, --Form Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса; Если МассивДанных.Количество() > 0 Тогда @@ -665,9 +675,9 @@ КонецПроцедуры -Процедура ПрочитатьFormString(Команда) +Процедура ПрочитатьFormString() - МассивДанных = ЗначениеОпции(Команда, "form-string"); + МассивДанных = ЗначениеОпции("form-string"); Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса; Если МассивДанных.Количество() > 0 Тогда @@ -700,11 +710,11 @@ КонецПроцедуры -Процедура ПрочитатьСертификатКлиента(Команда) +Процедура ПрочитатьСертификатКлиента() - СертификатКлиента = ПоследнееЗначениеОпции(Команда, "E"); + СертификатКлиента = ПоследнееЗначениеОпции("E"); - Если Не ЗначениеЗаполнено(СертификатКлиента) Тогда + Если СертификатКлиента = Неопределено Тогда Возврат; КонецЕсли; @@ -718,24 +728,24 @@ КонецПроцедуры -Процедура ПрочитатьИмяФайлаСертификатовУЦ(Команда) +Процедура ПрочитатьИмяФайлаСертификатовУЦ() - МассивЗначений = ЗначениеОпции(Команда, "cacert"); + МассивЗначений = ЗначениеОпции("cacert"); Если МассивЗначений.Количество() Тогда ОписаниеЗапроса.ИмяФайлаСертификатовУЦ = МассивЗначений[МассивЗначений.ВГраница()]; КонецЕсли; КонецПроцедуры -Процедура ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС(Команда) +Процедура ПрочитатьИспользованиеСертификатыУЦИзХранилищаОС() - ОписаниеЗапроса.ИспользоватьСертификатыУЦИзХранилищаОС = ЗначениеОпции(Команда, "ca-native"); + ОписаниеЗапроса.ИспользоватьСертификатыУЦИзХранилищаОС = УстановленФлагОпции("ca-native"); КонецПроцедуры -Процедура ПрочитатьПараметрыЗапросаURL(Команда) +Процедура ПрочитатьПараметрыЗапросаURL() - МассивДанных = ЗначениеОпции(Команда, "url-query"); + МассивДанных = ЗначениеОпции("url-query"); Для Каждого Данные Из МассивДанных Цикл @@ -786,18 +796,19 @@ КонецПроцедуры -Процедура ПрочитатьКаталогСохраненияФайлов(Команда) +Процедура ПрочитатьКаталогСохраненияФайлов() КаталогСохраненияФайлов = ""; - Каталог = ПоследнееЗначениеОпции(Команда, "output-dir"); + Каталог = ПоследнееЗначениеОпции("output-dir"); Если Не Каталог = Неопределено Тогда КаталогСохраненияФайлов = Каталог; КонецЕсли; КонецПроцедуры -Процедура ПрочитатьАдресПрокси(Команда) +Процедура ПрочитатьАдресПрокси() - АдресПрокси = ПоследнееЗначениеОпции(Команда, "proxy"); - Если Не ЗначениеЗаполнено(АдресПрокси) Тогда + АдресПрокси = ПоследнееЗначениеОпции("proxy"); + + Если АдресПрокси = Неопределено Тогда Возврат; КонецЕсли; @@ -817,10 +828,11 @@ КонецПроцедуры -Процедура ПрочитатьПользователяПрокси(Команда) +Процедура ПрочитатьПользователяПрокси() + + СтрокаПользователя = ПоследнееЗначениеОпции("proxy-user"); - СтрокаПользователя = ПоследнееЗначениеОпции(Команда, "proxy-user"); - Если Не ЗначениеЗаполнено(СтрокаПользователя) Тогда + Если СтрокаПользователя = Неопределено Тогда Возврат; КонецЕсли; @@ -834,9 +846,9 @@ КонецПроцедуры -Процедура ПрочитатьТипАутентификацииПрокси(Команда) +Процедура ПрочитатьТипАутентификацииПрокси() - Если ПоследнееЗначениеОпции(Команда, "proxy-ntlm") = Истина Тогда + Если УстановленФлагОпции("proxy-ntlm") Тогда ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.NTLM; Иначе ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификацииПрокси.Basic; @@ -844,28 +856,28 @@ КонецПроцедуры -Процедура ПрочитатьТаймаут(Команда) +Процедура ПрочитатьТаймаут() - Таймаут = ПоследнееЗначениеОпции(Команда, "max-time"); + Таймаут = ПоследнееЗначениеОпции("max-time"); Если Не Таймаут = Неопределено Тогда ОписаниеЗапроса.Таймаут = Таймаут; КонецЕсли; КонецПроцедуры -Процедура ПрочитатьТаймаутСоединения(Команда) +Процедура ПрочитатьТаймаутСоединения() - ТаймаутСоединения = ПоследнееЗначениеОпции(Команда, "connect-timeout"); + ТаймаутСоединения = ПоследнееЗначениеОпции("connect-timeout"); Если Не ТаймаутСоединения = Неопределено Тогда ОписаниеЗапроса.ТаймаутСоединения = ТаймаутСоединения; КонецЕсли; КонецПроцедуры -Процедура ПрочитатьРежимСоединенияFTP(Команда) +Процедура ПрочитатьРежимСоединенияFTP() - АдресДляОбратногоСоединения = ПоследнееЗначениеОпции(Команда, "ftp-port"); - АдресПрокси = ПоследнееЗначениеОпции(Команда, "proxy"); + АдресДляОбратногоСоединения = ПоследнееЗначениеОпции("ftp-port"); + АдресПрокси = ПоследнееЗначениеОпции("proxy"); Если ЗначениеЗаполнено(АдресДляОбратногоСоединения) И Не ЗначениеЗаполнено(АдресПрокси) Тогда ОписаниеЗапроса.FTPАдресОбратногоСоединения = АдресДляОбратногоСоединения; @@ -876,17 +888,17 @@ КонецПроцедуры -Процедура ПрочитатьИспользованиеПеренаправлений(Команда) +Процедура ПрочитатьИспользованиеПеренаправлений() - ОписаниеЗапроса.РазрешитьПеренаправление = ПоследнееЗначениеОпции(Команда, "location") = Истина; - ОписаниеЗапроса.ЗапретитьПеренаправление = ПоследнееЗначениеОпции(Команда, "no-location") = Истина; + ОписаниеЗапроса.РазрешитьПеренаправление = УстановленФлагОпции("location"); + ОписаниеЗапроса.ЗапретитьПеренаправление = УстановленФлагОпции("no-location"); КонецПроцедуры -Процедура ПрочитатьПовторныеПопытки(Команда) +Процедура ПрочитатьПовторныеПопытки() - МаксимальноеКоличествоПовторов = ПоследнееЗначениеОпции(Команда, "retry"); - МаксимальноеВремяПовторов = ПоследнееЗначениеОпции(Команда, "retry-max-time"); + МаксимальноеКоличествоПовторов = ПоследнееЗначениеОпции("retry"); + МаксимальноеВремяПовторов = ПоследнееЗначениеОпции("retry-max-time"); Если Не МаксимальноеКоличествоПовторов = Неопределено Тогда ОписаниеЗапроса.МаксимальноеКоличествоПовторов = МаксимальноеКоличествоПовторов; @@ -898,8 +910,8 @@ КонецПроцедуры -Функция НазначениеПередаваемыхДанных(Команда) - Если ЗначениеОпции(Команда, "get") = Истина Тогда +Функция НазначениеПередаваемыхДанных() + Если УстановленФлагОпции("get") Тогда Возврат НазначенияПередаваемыхДанных.СтрокаЗапроса; Иначе Возврат НазначенияПередаваемыхДанных.ТелоЗапроса; @@ -919,287 +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").ТМассивБулево(); - ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("L location", "", "Разрешает перенаправления").ТМассивБулево(); - ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("no-location", "", "Запрещает перенаправления").ТМассивБулево(); - ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry", 0, "Количество повторных попыток").ТМассивЧисел(); - ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry-max-time", 0, "Максимальное время повторов").ТМассивЧисел(); - ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("F form", "Передаваемые данные по HTTP POST (multipart/form-data)").ТМассивСтрок(); - ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("form-string", "Передаваемые данные по HTTP POST без интерпретации спецтальных сиволов (multipart/form-data)").ТМассивСтрок(); + ДобавитьПоддерживаемуюОпцию( + "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").ТМассивБулево(); - ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("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").ТМассивБулево(); + ДобавитьНеподдерживаемуюОпцию("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").ТМассивБулево(); Возврат КонсольноеПриложение; КонецФункции -Функция ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение(Наименования) +Функция ДобавитьНеподдерживаемуюОпцию(Наименования) Возврат ДобавитьОпциюВКонсольноеПриложение(Наименования, Ложь); КонецФункции -Функция ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение(Наименования, ЗначениеПоУмолчанию = "", Описание = "") - Возврат ДобавитьОпциюВКонсольноеПриложение(Наименования, Истина, ЗначениеПоУмолчанию, Описание); +Функция ДобавитьПоддерживаемуюОпцию(Наименования, Описание = "") + Возврат ДобавитьОпциюВКонсольноеПриложение(Наименования, Истина, Описание); КонецФункции -Функция ДобавитьОпциюВКонсольноеПриложение(Наименования, Поддерживается, ЗначениеПоУмолчанию = "", Описание = "") - Опция = КонсольноеПриложение.Опция(Наименования, ЗначениеПоУмолчанию, Описание); +Функция ДобавитьОпциюВКонсольноеПриложение(Наименования, Поддерживается, Описание = "") + Опция = КонсольноеПриложение.Опция(Наименования, , Описание); Описание = Новый Структура(); Описание.Вставить("Поддерживается", Поддерживается); @@ -1258,7 +1381,7 @@ КонецПроцедуры -Процедура ДополнитьОшибкиНеподдерживаемыеОпции(Команда) +Процедура ДополнитьОшибкиНеподдерживаемыеОпции() ПоддерживаемыеОпцииГенератора = Новый Соответствие(); @@ -1284,7 +1407,7 @@ ПроверенныеОпции.Вставить(Наименование, Истина); - Значение = Команда.ЗначениеОпции(Наименование); + Значение = ЗначениеОпции(Наименование); Если ЗначениеЗаполнено(Значение) Тогда ТекстОшибки = СтрШаблон("Опция %1 не поддерживается", СтрСоединить(Описание.Наименования, ", ")); ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка(ТекстОшибки)); @@ -1341,23 +1464,23 @@ КонецПроцедуры -Процедура ПроверитьДанные(Команда) +Процедура ПроверитьДанные() ШаблонОдновременнаяПередача = "Одновременная передача опций %1 и %2 запрещена"; - Если ЕстьОпцииГруппыData(Команда) И ЕстьОпцииГруппыForm(Команда) Тогда + Если ЕстьОпцииГруппыData() И ЕстьОпцииГруппыForm() Тогда ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-d (--data)", "-F (--form)"); ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); Возврат; КонецЕсли; - Если ЕстьОпцииГруппыForm(Команда) И ЗначениеОпции(Команда, "head") = Истина Тогда + Если ЕстьОпцииГруппыForm() И УстановленФлагОпции( "head") Тогда ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-I (--head)", "-F (--form)"); ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); Возврат; КонецЕсли; - Если ЕстьОпции(Команда, "upload-file") И ЕстьОпцииГруппыForm(Команда) Тогда + Если ЕстьОпции("upload-file") И ЕстьОпцииГруппыForm() Тогда ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-T (--upload-file)", "-F (--form)"); ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки)); Возврат; @@ -1393,32 +1516,45 @@ КонецПроцедуры -Функция ЕстьОпции(Команда, Опции) +Функция ЕстьОпции(Опции) Для Каждого Опция Из СтрРазделить(Опции, ",") Цикл - Если ЗначениеЗаполнено(ЗначениеОпции(Команда, Опция)) Тогда + Если ЗначениеЗаполнено(ЗначениеОпции(Опция)) Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции -Функция ЕстьОпцииГруппыData(Команда) - Возврат ЕстьОпции(Команда, "d,data,data-raw,data-binary,data-urlencode,data-ascii,json"); +Функция ЕстьОпцииГруппыData() + Возврат ЕстьОпции("d,data,data-raw,data-binary,data-urlencode,data-ascii,json"); КонецФункции -Функция ЕстьОпцииГруппыForm(Команда) - Возврат ЕстьОпции(Команда, "F,form,form-string"); +Функция ЕстьОпцииГруппыForm() + Возврат ЕстьОпции("F,form,form-string"); КонецФункции -Функция ПоследнееЗначениеОпции(Команда, ИмяОпции) - МассивЗначений = ЗначениеОпции(Команда, ИмяОпции); - Если ТипЗнч(МассивЗначений) = Тип("Массив") И МассивЗначений.Количество() Тогда - Возврат МассивЗначений[МассивЗначений.ВГраница()]; +Функция УстановленФлагОпции(ИмяОпции) + Значение = ПоследнееЗначениеОпции(ИмяОпции); + Если Не Значение = Неопределено Тогда + Возврат Значение; + Иначе + Возврат Ложь; + КонецЕсли; +КонецФункции + +Функция ПоследнееЗначениеОпции(ИмяОпции) + Значение = ЗначениеОпции(ИмяОпции); + Если ТипЗнч(Значение) = Тип("Массив") Тогда + Если Значение.Количество() Тогда + Возврат Значение[Значение.ВГраница()]; + КонецЕсли; + Иначе + Возврат Значение; КонецЕсли; КонецФункции -Функция ЗначениеОпции(Команда, ИмяОпции) - Возврат Команда.ЗначениеОпции(ИмяОпции); +Функция ЗначениеОпции(ИмяОпции) + Возврат ТекущаяКоманда.ЗначениеОпции(ИмяОпции); КонецФункции // Используется для отключения вывода справки cli diff --git "a/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" "b/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" index 6264350..3622030 100644 --- "a/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" +++ "b/tools/\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260\320\236\320\277\321\206\320\270\320\271\320\230\320\267\320\241\320\260\320\271\321\202\320\260Curl.os" @@ -47,7 +47,7 @@ Опция = ОпцияБезТире(Опция); ОпцииОбработанные.Добавить(Опция); КонецЦикла; - Текст = СтрШаблон("ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение(""%1"").%2();", + Текст = СтрШаблон("ДобавитьНеподдерживаемуюОпцию(""%1"").%2();", СтрСоединить(ОпцииОбработанные, " "), ?(Строка.ЭтоБулево, "ТМассивБулево", "ТМассивСтрок")); Результат.ДобавитьСтроку(Текст); From 9068d23fc2e04363df4c2489234d40efdabce643 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 20 Jan 2025 22:39:15 +0300 Subject: [PATCH 21/29] =?UTF-8?q?feat(web):=20=D0=9A=D0=BE=D0=BD=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20?= =?UTF-8?q?=D0=BE=D1=82=20=D0=B2=D1=8B=D0=B1=D1=80=D0=B0=D0=BD=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=84=D0=BB=D0=B0=D0=B3=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/view/index.html | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/interface/view/index.html b/src/interface/view/index.html index dbdce34..2c824a7 100644 --- a/src/interface/view/index.html +++ b/src/interface/view/index.html @@ -322,7 +322,7 @@ let convertButton = document.getElementById("convert"); let convertInput = document.getElementById("command"); - function convert(command) { + function convert(command, lang) { if (!isAllowedRequests()) return; hideErrors(); @@ -354,7 +354,7 @@ enableRequests(); }; req.responseType = "json"; - req.open("GET", "/convert?cmd=" + encodeURIComponent(command)); + req.open("GET", "/convert?lang=" + lang + "&cmd=" + encodeURIComponent(command)); req.send(); disableRequests(); @@ -414,10 +414,28 @@ return !convertButton.disable; } - convertButton.addEventListener("click", function (e) { + function getCommand() { let formData = new FormData(document.forms.curl); let command = formData.get("command"); - convert(command); + return command; + } + + function getLang() { + let radios = document.getElementsByName('syntax'); + + for (let i = 0; i < radios.length; i++) { + if (radios[i].checked) { + return radios[i].value; + } + } + + return '1c'; + } + + convertButton.addEventListener("click", function (e) { + let command = getCommand(); + let lang = getLang(); + convert(command, lang); }); document.getElementById("copy").addEventListener("click", function (e) { @@ -461,7 +479,7 @@ ontouchend="this.classList.remove('hoveredbutton')">
-
From 1fca890410beff1bda87b3dd2f3edcf3a19bf353 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Mon, 20 Jan 2025 22:52:25 +0300 Subject: [PATCH 22/29] =?UTF-8?q?fix:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D0=B8,=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0=20=D0=BE=D0=BA=D0=B0=D0=BD=D1=87?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82=D1=83=D1=8E=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=B2=D1=8B=D1=87=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\274\320\260\320\275\320\264\321\213.os" | 4 +++- ...4\320\260\320\275\320\264\321\213_test.os" | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) 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/tests/\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_test.os" "b/tests/\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_test.os" index 88e199d..a61d4d9 100644 --- "a/tests/\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_test.os" +++ "b/tests/\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_test.os" @@ -280,4 +280,25 @@ Ожидаем.Что(Результат[0][Инд]).Равно(Эталон[Инд]); КонецЦикла; +КонецПроцедуры + +&Тест +Процедура ТестДолжен_РаспарситьКомандуСОткрытойКавычкойВКонце() Экспорт + + КоманднаяСтрока = "myapp -a """; + + Эталон = Новый Массив; + Эталон.Добавить("myapp"); + Эталон.Добавить("-a"); + + Парсер = Новый ПарсерКонсольнойКоманды(); + Результат = Парсер.Распарсить(КоманднаяСтрока); + + Ожидаем.Что(Результат).ИмеетДлину(1); + Ожидаем.Что(Результат[0]).ИмеетДлину(Эталон.Количество()); + + Для Инд = 0 По Результат[0].ВГраница() Цикл + Ожидаем.Что(Результат[0][Инд]).Равно(Эталон[Инд]); + КонецЦикла; + КонецПроцедуры \ No newline at end of file From d75d17d6cccad141e7e5835747b2e89cd90077c1 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Tue, 21 Jan 2025 18:21:22 +0300 Subject: [PATCH 23/29] =?UTF-8?q?feat(web):=20=D0=9A=D0=BE=D0=BD=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B5=D0=BB=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/view/index.html | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/interface/view/index.html b/src/interface/view/index.html index 2c824a7..28944a9 100644 --- a/src/interface/view/index.html +++ b/src/interface/view/index.html @@ -322,7 +322,10 @@ let convertButton = document.getElementById("convert"); let convertInput = document.getElementById("command"); - function convert(command, lang) { + function convert() { + let command = getCommand(); + let lang = getLang(); + if (!isAllowedRequests()) return; hideErrors(); @@ -421,7 +424,7 @@ } function getLang() { - let radios = document.getElementsByName('syntax'); + let radios = document.getElementsByName('lang'); for (let i = 0; i < radios.length; i++) { if (radios[i].checked) { @@ -433,9 +436,7 @@ } convertButton.addEventListener("click", function (e) { - let command = getCommand(); - let lang = getLang(); - convert(command, lang); + convert(); }); document.getElementById("copy").addEventListener("click", function (e) { @@ -448,6 +449,12 @@ } }); + document.getElementsByName("lang").forEach(function(e) { + e.addEventListener("change", function(e) { + if(getCommand()) convert(); + }); + }); + const highlighter = await createHighlighterCore({ themes: [theme], langs: [lang], @@ -479,12 +486,12 @@ ontouchend="this.classList.remove('hoveredbutton')">
-
- +
From 32b35bd2af29bb267ab21a1d19160ad6ae7ce73d Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Tue, 21 Jan 2025 18:33:51 +0300 Subject: [PATCH 24/29] =?UTF-8?q?feat(web):=20=D0=92=D0=BE=D1=81=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B4=D0=B5=D1=84=D0=BE=D0=BB=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0=D1=82=D0=B0,?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=D0=B0=20=D0=BD=D0=B5=20=D0=B7=D0=B0=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/view/index.html | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/interface/view/index.html b/src/interface/view/index.html index 28944a9..9ca70fd 100644 --- a/src/interface/view/index.html +++ b/src/interface/view/index.html @@ -316,9 +316,16 @@ import { createHighlighterCore } from '/static/shiki/core.js'; import { createOnigurumaEngine } from '/static/shiki/engine/oniguruma.js'; - let outputText = 'Соединение = Новый HTTPСоединение("example.com", 80);\n' - + 'HTTPЗапрос = Новый HTTPЗапрос("/");\n\n' - + 'HTTPОтвет = Соединение.ВызватьHTTPМетод("GET", HTTPЗапрос);'; + let defaultOutputs = { + '1c': + 'Соединение = Новый HTTPСоединение("example.com", 80);\n' + + 'HTTPЗапрос = Новый HTTPЗапрос("/");\n\n' + + 'HTTPОтвет = Соединение.ВызватьHTTPМетод("GET", HTTPЗапрос);', + 'connector': + 'Результат = КоннекторHTTP.Get("http://example.com")' + }; + + let outputText = ""; let convertButton = document.getElementById("convert"); let convertInput = document.getElementById("command"); @@ -443,6 +450,12 @@ copyToClipboard(outputText); }); + convertInput.addEventListener("input", function (e) { + if(!getCommand()) { + setOutput(defaultOutputs[getLang()]); + } + }) + document.addEventListener("keyup", function (e) { if (e.keyCode == 13 && e.ctrlKey) { convertButton.click(); @@ -451,7 +464,11 @@ document.getElementsByName("lang").forEach(function(e) { e.addEventListener("change", function(e) { - if(getCommand()) convert(); + if(getCommand()) { + convert(); + } else { + setOutput(defaultOutputs[getLang()]); + } }); }); @@ -461,7 +478,7 @@ engine: createOnigurumaEngine(import('/static/shiki/wasm.js')) }); - setOutput(outputText); + setOutput(defaultOutputs[getLang()]); enableRequests(); From 0a81fb3061eca4c8adcd81e0b1437fdbbba2f869 Mon Sep 17 00:00:00 2001 From: Alexander Osadchy Date: Tue, 21 Jan 2025 23:23:03 +0400 Subject: [PATCH 25/29] =?UTF-8?q?docs:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA=D1=82=D0=BE=D1=80=20(#153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3727ffa..7e89faf 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,21 @@ curlone web -o -p 3333 > >HTTPОтвет = Соединение.ВызватьHTTPМетод("POST", HTTPЗапрос); >``` +> +>Код Connector +> +>```bsl +>Заголовки = Новый Соответствие(); +>Заголовки.Вставить("X-Header", "value"); +> +>Данные = Новый Соответствие(); +>Данные.Вставить("key", "value"); +> +>ДополнительныеПараметры = Новый Структура(); +>ДополнительныеПараметры.Вставить("Заголовки", Заголовки); +> +>Результат = КоннекторHTTP.Post("https://httpbin.org/post", Данные, >ДополнительныеПараметры); +>``` Горячие клавиши: @@ -81,22 +96,46 @@ 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.Конвертировать(КонсольнаяКоманда, >Генератор); +>``` ## Особенности использования From 9dee4719325fbe69fab7ca2fd93424b29ddf65c7 Mon Sep 17 00:00:00 2001 From: Alexander Osadchy Date: Tue, 21 Jan 2025 23:26:43 +0400 Subject: [PATCH 26/29] =?UTF-8?q?docs:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA=D1=82=D0=BE=D1=80=20(#153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7e89faf..8e84259 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ curlone convert <команда> >Генератор = Новый ГенераторПрограммногоКода1С(); > >КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); ->Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, >Генератор); +>Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); >``` >Код Connector > @@ -134,7 +134,7 @@ curlone convert <команда> >Генератор = Новый ГенераторПрограммногоКодаКоннекторHTTP(); > >КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); ->Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, >Генератор); +>Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); >``` ## Особенности использования From 7b6ac3625e955d090c1c4ff16d4242d2c616c74d Mon Sep 17 00:00:00 2001 From: Alexander Osadchy Date: Tue, 21 Jan 2025 23:40:28 +0400 Subject: [PATCH 27/29] =?UTF-8?q?docs:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA=D1=82=D0=BE=D1=80=20(#153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8e84259..aa62450 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ opm install curlone ## Использование -### web приложение +## web приложение Запуск приложения: @@ -71,14 +71,14 @@ curlone web -o -p 3333 >ДополнительныеПараметры = Новый Структура(); >ДополнительныеПараметры.Вставить("Заголовки", Заголовки); > ->Результат = КоннекторHTTP.Post("https://httpbin.org/post", Данные, >ДополнительныеПараметры); +>Результат = КоннекторHTTP.Post("https://httpbin.org/post", Данные, ДополнительныеПараметры); >``` Горячие клавиши: * `ctrl + enter` - вызов команды `Конвертировать` -### cli приложение +## cli приложение Синтаксис команды: @@ -108,7 +108,7 @@ curlone convert <команда> >curlone convert connector https://httpbin.org/post --request POST -d "key=value" -H "X-Header: value" >``` -### библиотека +## библиотека Пример использования: @@ -124,6 +124,7 @@ curlone convert <команда> >КонвертерКомандыCURL = Новый КонвертерКомандыCURL(); >Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор); >``` +> >Код Connector > >```bsl From 66c9c9da7146a821702a3fca0909f93c0ca690b9 Mon Sep 17 00:00:00 2001 From: Alexander Osadchy Date: Tue, 21 Jan 2025 23:51:09 +0400 Subject: [PATCH 28/29] =?UTF-8?q?chore:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B2=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=20=D0=BA=D0=BE=D0=BD=D0=BD=D0=B5=D0=BA=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/view/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface/view/index.html b/src/interface/view/index.html index 9ca70fd..797f485 100644 --- a/src/interface/view/index.html +++ b/src/interface/view/index.html @@ -322,7 +322,7 @@ + 'HTTPЗапрос = Новый HTTPЗапрос("/");\n\n' + 'HTTPОтвет = Соединение.ВызватьHTTPМетод("GET", HTTPЗапрос);', 'connector': - 'Результат = КоннекторHTTP.Get("http://example.com")' + 'Результат = КоннекторHTTP.Get("http://example.com");' }; let outputText = ""; From bf80aacef99b0731fa8688b1d8bea1f88b1a6e83 Mon Sep 17 00:00:00 2001 From: Alexander Osadchy Date: Wed, 22 Jan 2025 01:31:47 +0400 Subject: [PATCH 29/29] =?UTF-8?q?chore:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20(#155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autumn-properties.json | 2 +- packagedef | 2 +- src/interface/view/images/favicons/manifest.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) 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/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/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",