Рефакторинг (#206)

This commit is contained in:
Dmitry Ivanov
2025-03-22 00:33:10 +03:00
committed by GitHub
parent 37d405bee7
commit 4e99ad8b7c
20 changed files with 608 additions and 273 deletions
@@ -25,7 +25,7 @@
РезультатКонвертации = КонвертерКомандыCURL.Конвертировать(ПодготовленныеАргументы, Генератор, Ошибки);
Исключение
РезультатКонвертации = "";
Ошибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())));
Ошибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
Для Каждого Ошибка Из Ошибки Цикл
@@ -35,11 +35,13 @@
КонецЦикла;
Если ЗначениеЗаполнено(РезультатКонвертации) Тогда
Если Ошибки.Количество() Тогда
Консоль.Вывести(Символы.ПС);
КонецЕсли;
Консоль.Вывести(РезультатКонвертации);
КонецЕсли;
КонецПроцедуры
@@ -68,7 +70,7 @@
Функция ПодготовитьАргументы()
ПодготовленныеАргументы = Новый Массив();
ОбщегоНазначения.ДополнитьМассив(ПодготовленныеАргументы, ВходящиеАргументы);
ОбщийНаборИнструментов.ДополнитьМассив(ПодготовленныеАргументы, ВходящиеАргументы);
ПодготовленныеАргументы[0] = "curl";
@@ -105,11 +107,15 @@
КонецПроцедуры
Функция ПолучитьГенераторПоАргументу(Аргумент)
Если Аргумент = "connector" Тогда
Возврат Новый ГенераторПрограммногоКодаКоннекторHTTP();
ИначеЕсли Аргумент = "1c" Тогда
Возврат Новый ГенераторПрограммногоКода1С();
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ГенераторПоУмолчанию()
@@ -55,7 +55,8 @@
ПакетРесурсов = МенеджерРесурсовЛокализации.ПолучитьПакеты(
"Общий, КлючевыеСловаЯзыка, ГенераторПрограммногоКода1С",
КодЛокализации);
КодЛокализации
);
ОпределитьМетодУстановкиТелаЗапроса();
ДобавитьЧтениеФайлов();
@@ -162,12 +163,15 @@
КонецФункции
Функция ПоддерживаемыеПротоколы() Экспорт
Протоколы = Новый Массив();
Протоколы.Добавить(ПротоколыURL.HTTP);
Протоколы.Добавить(ПротоколыURL.HTTPS);
Протоколы.Добавить(ПротоколыURL.FTP);
Протоколы.Добавить(ПротоколыURL.FTPS);
Возврат Протоколы;
КонецФункции
#КонецОбласти
@@ -202,8 +206,9 @@
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(
"%1 = СтрЗаменить(Новый УникальныйИдентификатор, ""-"", """");",
ИмяПараметраРазделительДанныхMultipart);
"%1 = СтрЗаменить(Новый УникальныйИдентификатор, ""-"", """");",
ИмяПараметраРазделительДанныхMultipart
);
КонецПроцедуры
@@ -214,6 +219,7 @@
ЛокальныйКонструктор = Новый КонструкторПрограммногоКода();
Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл
ПараметрыФункции = Новый Массив();
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ));
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение));
@@ -221,19 +227,24 @@
ЛокальныйКонструктор.ДобавитьСтроку(
"%1.Вставить(%2);",
ИмяПараметраЗаголовки,
ЛокальныйКонструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
ЛокальныйКонструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецЦикла;
ДобавитьЗаголовокAuthorization(ЛокальныйКонструктор);
ДобавитьЗаголовокContentTypeMultipart(ЛокальныйКонструктор);
Если Не ЛокальныйКонструктор.Пустой() Тогда
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки)
.ДобавитьСтроку(ЛокальныйКонструктор.ПолучитьРезультат());
.ДобавитьСтроку(ЛокальныйКонструктор.ПолучитьРезультат()
);
ИнициализированыЗаголовки = Истина;
КонецЕсли;
КонецПроцедуры
@@ -241,10 +252,13 @@
Процедура ДобавитьЗаголовокAuthorization(Конструктор)
Если ОписаниеЗапроса.ТипАутентификации = ТипыАутентификации.Bearer Тогда
Конструктор.ДобавитьСтроку(
"%1.Вставить(""Authorization"", %2);",
ИмяПараметраЗаголовки,
Конструктор.ПараметрВСтроку("Bearer " + ОписаниеЗапроса.ТокенBearer));
Конструктор.ПараметрВСтроку("Bearer " + ОписаниеЗапроса.ТокенBearer)
);
КонецЕсли;
КонецПроцедуры
@@ -258,7 +272,8 @@
Конструктор.ДобавитьСтроку(
"%1.Вставить(""Content-Type"", ""multipart/form-data; boundary="" + %2);",
ИмяПараметраЗаголовки,
ИмяПараметраРазделительДанныхMultipart);
ИмяПараметраРазделительДанныхMultipart
);
КонецПроцедуры
@@ -283,7 +298,7 @@
КонецЦикла;
Код = КоллекцияПрограммногоКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
Код = ЛокальныйГенераторКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
Если Не ПустаяСтрока(Код) Тогда
Конструктор
@@ -300,12 +315,14 @@
КонецЕсли;
ТелоЗапросаСтрока = "";
ТелоЗапроса = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку(
ТелоЗапроса = ЛокальныйГенераторКода.ДанныеЗапроса(
НазначенияПередаваемыхДанных.ТелоЗапроса,
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
ПрочитанныеФайлы);
ПрочитанныеФайлы
);
Если ЗначениеЗаполнено(ТелоЗапроса) Тогда
Если СтрЧислоСтрок(ТелоЗапроса) = 1 Тогда
ТелоЗапросаСтрока = ТелоЗапроса;
Иначе
@@ -313,6 +330,7 @@
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("%1 = %2;", ИмяПараметраТелоЗапросаСтрока, ТелоЗапроса);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
@@ -321,12 +339,15 @@
ИспользуетсяЗащищенноеСоединение = Ложь;
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL);
Если ИспользуетсяЗащищенноеСоединение Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ИспользуетсяЗащищенноеСоединение Тогда
@@ -338,28 +359,42 @@
// Сертификат клиента
ИмяПараметраСертификатаКлиента = "";
Если ЗначениеЗаполнено(ОписаниеЗапроса.ИмяФайлаСертификатаКлиента) Тогда
ИмяПараметраСертификатаКлиента = "СертификатКлиента";
ПараметрыФункции = Новый Массив;
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяФайлаСертификатаКлиента));
ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПарольСертификатаКлиента));
Конструктор.ДобавитьСтроку("%1 = Новый СертификатКлиентаФайл(%2);",
Конструктор.ДобавитьСтроку(
"%1 = Новый СертификатКлиентаФайл(%2);",
ИмяПараметраСертификатаКлиента,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецЕсли;
// Сертификаты УЦ
ИмяПараметраСертификатыУдостоверяющихЦентров = "СертификатыУдостоверяющихЦентров";
Если ОписаниеЗапроса.ИспользоватьСертификатыУЦИзХранилищаОС Тогда
Конструктор.ДобавитьСтроку("%1 = Новый СертификатыУдостоверяющихЦентровОС();",
ИмяПараметраСертификатыУдостоверяющихЦентров);
Конструктор.ДобавитьСтроку(
"%1 = Новый СертификатыУдостоверяющихЦентровОС();",
ИмяПараметраСертификатыУдостоверяющихЦентров
);
ИначеЕсли ЗначениеЗаполнено(ОписаниеЗапроса.ИмяФайлаСертификатовУЦ) Тогда
Конструктор.ДобавитьСтроку("%1 = Новый СертификатыУдостоверяющихЦентровФайл(%2);",
Конструктор.ДобавитьСтроку(
"%1 = Новый СертификатыУдостоверяющихЦентровФайл(%2);",
ИмяПараметраСертификатыУдостоверяющихЦентров,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяФайлаСертификатовУЦ));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяФайлаСертификатовУЦ)
);
Иначе
ИмяПараметраСертификатыУдостоверяющихЦентров = "";
КонецЕсли;
// Защищенное соединение
@@ -370,7 +405,8 @@
Конструктор.ДобавитьСтроку(
"%1 = Новый ЗащищенноеСоединениеOpenSSL(%2);",
ИмяПараметраЗащищенноеСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецПроцедуры
@@ -380,15 +416,15 @@
Возврат;
КонецЕсли;
Если Не ОбщегоНазначения.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда
Если Не ОбщийНаборИнструментов.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда
ТекстОшибки = СтрШаблон("Прокси протокол %1 не поддерживается", ОписаниеЗапроса.ПроксиПротокол);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(КоллекцияПрограммногоКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
.ДобавитьСтроку(ЛокальныйГенераторКода.ИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
КонецПроцедуры
@@ -411,10 +447,11 @@
Конструктор.ДобавитьКомментарий(
"{t(Текст.Запрос)} %1. %2",
НомерЗапроса,
Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии));
Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)
);
КонецЕсли;
Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда
Если ОбщийНаборИнструментов.ЭтоHTTP(СтруктураURL.Схема) Тогда
ДобавитьHTTPСоединение(СтруктураURL);
ДобавитьПоследовательнуюОтправкуФайлов(ОписаниеРесурса);
@@ -426,7 +463,7 @@
ДобавитьЧтениеОтветаJSON();
КонецЕсли;
ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда
ИначеЕсли ОбщийНаборИнструментов.ЭтоFTP(СтруктураURL.Схема) Тогда
ДобавитьFTPСоединение(СтруктураURL);
ДобавитьВызовFTPМетода(ОписаниеРесурса, СтруктураURL);
@@ -434,11 +471,11 @@
Иначе
ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
КонецЕсли;
Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Конструктор.Очистить();
Возврат;
КонецЕсли;
@@ -455,20 +492,7 @@
ДлинаИмениФайлаВКомментарии = 100;
ВсеФайлы = Новый Массив();
ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеЗапроса.Файлы);
ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеРесурса.Файлы);
ПередаваемыеФайлы = Новый Массив();
Для Каждого ПередаваемыйФайл Из ВсеФайлы Цикл
Если ПередаваемыйФайл.ОтправлятьОтдельно
И Не ПередаваемыйФайл.ПрочитатьСодержимое
И ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
ПередаваемыеФайлы.Добавить(ПередаваемыйФайл);
КонецЕсли;
КонецЦикла;
ПередаваемыеФайлы = ОписаниеЗапроса.ФайлыОтправляемыеОтдельно(ОписаниеРесурса);
КоличествоФайлов = ПередаваемыеФайлы.Количество();
НомерФайла = 0;
@@ -482,12 +506,13 @@
.ДобавитьПустуюСтроку()
.ДобавитьКомментарий("{t(Текст.ПередачаФайла)} %1. %2",
НомерФайла,
ИмяФайла);
ИмяФайла
);
КонецЕсли;
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
СтруктураURL.Путь = ОбщийНаборИнструментов.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
КонецЕсли;
ДобавитьHTTPЗапрос(СтруктураURL);
@@ -495,7 +520,8 @@
Конструктор.ДобавитьСтроку(
"%1.УстановитьИмяФайлаТела(%2);",
ИмяПараметраHTTPЗапрос,
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)
);
ДобавитьВызовHTTPМетода(ОписаниеРесурса);
@@ -527,7 +553,8 @@
Конструктор.ДобавитьСтроку(
"%1 = Новый HTTPСоединение(%2);",
ИмяПараметраСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецПроцедуры
@@ -535,19 +562,28 @@
ПараметрыФункции = Новый Массив;
АдресРесурсаКод = КоллекцияПрограммногоКода.СборкаАдресаРесурса(СтруктураURL,
АдресРесурсаКод = ЛокальныйГенераторКода.АдресРесурса(
СтруктураURL,
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
ПрочитанныеФайлы);
ПрочитанныеФайлы
);
Если ПустаяСтрока(АдресРесурсаКод) Тогда
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку("/"));
ИначеЕсли СтрЧислоСтрок(АдресРесурсаКод) > 1 Тогда
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("АдресРесурса = %1;", АдресРесурсаКод);
ПараметрыФункции.Добавить("АдресРесурса");
Иначе
ПараметрыФункции.Добавить(АдресРесурсаКод);
КонецЕсли;
Если ИнициализированыЗаголовки Тогда
@@ -557,7 +593,8 @@
Конструктор.ДобавитьСтроку(
"%1 = Новый HTTPЗапрос(%2);",
ИмяПараметраHTTPЗапрос,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецПроцедуры
@@ -572,10 +609,12 @@
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("%1 = %2.ВызватьHTTPМетод(%3);",
.ДобавитьСтроку(
"%1 = %2.ВызватьHTTPМетод(%3);",
ИмяПараметраHTTPОтвет,
ИмяПараметраСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
ВызванМетодПоТекущемуURL = Истина;
@@ -588,9 +627,10 @@
Возврат;
КонецЕсли;
Каталог = ОбщегоНазначения.КаталогФайла(ОписаниеРесурса.ИмяВыходногоФайла);
Каталог = ОбщийНаборИнструментов.КаталогФайла(ОписаниеРесурса.ИмяВыходногоФайла);
Если Не ПустаяСтрока(Каталог) Тогда
КодСозданияКаталога = "// {t(Создание каталога по необходимости)}
|Каталог = Новый Файл(""%1"");
|Если Не Каталог.Существует() Тогда
@@ -600,6 +640,7 @@
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(КодСозданияКаталога, Каталог);
КонецЕсли;
КонецПроцедуры
@@ -621,7 +662,8 @@
Конструктор.ДобавитьСтроку(
"%1.УстановитьТелоИзСтроки(%2);",
ИмяПараметраHTTPЗапрос,
?(ЗначениеЗаполнено(ТелоЗапросаСтрока), ТелоЗапросаСтрока, ИмяПараметраТелоЗапросаСтрока));
?(ЗначениеЗаполнено(ТелоЗапросаСтрока), ТелоЗапросаСтрока, ИмяПараметраТелоЗапросаСтрока)
);
КонецПроцедуры
@@ -632,8 +674,8 @@
КонецЕсли;
Файлы = Новый Массив();
ОбщегоНазначения.ДополнитьМассив(Файлы, ОписаниеЗапроса.Файлы);
ОбщегоНазначения.ДополнитьМассив(Файлы, ОписаниеРесурса.Файлы);
ОбщийНаборИнструментов.ДополнитьМассив(Файлы, ОписаниеЗапроса.Файлы);
ОбщийНаборИнструментов.ДополнитьМассив(Файлы, ОписаниеРесурса.Файлы);
ЭтоПервыйФайл = Истина;
Для Каждого ПередаваемыйФайл Из Файлы Цикл
@@ -648,7 +690,8 @@
"%1%2.УстановитьИмяФайлаТела(%3);",
?(ЭтоПервыйФайл, "", "// "),
ИмяПараметраHTTPЗапрос,
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)
);
ЭтоПервыйФайл = Ложь;
@@ -678,7 +721,10 @@
.ДобавитьСтроку("РазделительСтрок = Символы.ВК + Символы.ПС;")
.ДобавитьСтроку("ЗаписьДанных = Новый ЗаписьДанных(Поток, , , """", """");")
.ДобавитьСтроку(КонструкторЗаписиДанных.ПолучитьРезультат())
.ДобавитьСтроку("ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + ""--"" + РазделительСтрок);", ИмяПараметраРазделительДанныхMultipart)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + ""--"" + РазделительСтрок);",
ИмяПараметраРазделительДанныхMultipart
)
.ДобавитьСтроку("ЗаписьДанных.Закрыть();");
КонецПроцедуры
@@ -693,38 +739,47 @@
Продолжить;
КонецЕсли;
ContentDisposition = ОбщегоНазначения.НайтиВСоответствииПоКлючуБезУчетаРегистра(
ContentDisposition = ОбщийНаборИнструментов.НайтиВСоответствииПоКлючуБезУчетаРегистра(
ПередаваемыйТекст.Заголовки,
"Content-Disposition");
ContentDisposition = ?(ContentDisposition = Неопределено, "form-data", ContentDisposition);
КонструкторЗаписиДанных
.ДобавитьКомментарий(
"{t(Текст.Начало)} %1", ПередаваемыйТекст.ИмяПоля)
"{t(Текст.Начало)} %1",
ПередаваемыйТекст.ИмяПоля
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + РазделительСтрок);", ИмяПараметраРазделитель)
"ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + РазделительСтрок);",
ИмяПараметраРазделитель
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""Content-Disposition: %1; name=""%2"""" + РазделительСтрок);",
ContentDisposition,
Конструктор.ПараметрВСтроку(ПередаваемыйТекст.ИмяПоля));
Конструктор.ПараметрВСтроку(ПередаваемыйТекст.ИмяПоля)
);
Если ЗначениеЗаполнено(ПередаваемыйТекст.ТипMIME) Тогда
КонструкторЗаписиДанных.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""Content-Type: %1"" + РазделительСтрок);",
ПередаваемыйТекст.ТипMIME);
ПередаваемыйТекст.ТипMIME
);
КонецЕсли;
ДобавитьЗаголовкиВЗаписьДанныхMultipart(КонструкторЗаписиДанных, ПередаваемыйТекст.Заголовки);
КонструкторЗаписиДанных
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);")
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);"
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(%1 + РазделительСтрок);",
Конструктор.ПараметрВСтроку(ПередаваемыйТекст.Значение))
Конструктор.ПараметрВСтроку(ПередаваемыйТекст.Значение)
)
.ДобавитьКомментарий(
"{t(Текст.Конец)} %1",
ПередаваемыйТекст.ИмяПоля);
ПередаваемыйТекст.ИмяПоля
);
КонецЦикла;
@@ -742,36 +797,46 @@
Продолжить;
КонецЕсли;
ContentDisposition = ОбщегоНазначения.НайтиВСоответствииПоКлючуБезУчетаРегистра(
ContentDisposition = ОбщийНаборИнструментов.НайтиВСоответствииПоКлючуБезУчетаРегистра(
ПередаваемыйФайл.Заголовки,
"Content-Disposition");
ContentDisposition = ?(ContentDisposition = Неопределено, "form-data", ContentDisposition);
КонструкторЗаписиДанных
.ДобавитьКомментарий(
"{t(Текст.Начало)} %1", ПередаваемыйФайл.ИмяПоля)
"{t(Текст.Начало)} %1", ПередаваемыйФайл.ИмяПоля
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + РазделительСтрок);", ИмяПараметраРазделитель)
"ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + РазделительСтрок);",
ИмяПараметраРазделитель
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""Content-Disposition: %1; name=""""%2"""""" + РазделительСтрок);",
ContentDisposition,
ПередаваемыйФайл.ИмяПоля);
ПередаваемыйФайл.ИмяПоля
);
Если ЗначениеЗаполнено(ПередаваемыйФайл.ТипMIME) Тогда
КонструкторЗаписиДанных.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""Content-Type: %1"" + РазделительСтрок);",
ПередаваемыйФайл.ТипMIME)
ПередаваемыйФайл.ТипMIME
);
КонецЕсли;
ДобавитьЗаголовкиВЗаписьДанныхMultipart(КонструкторЗаписиДанных, ПередаваемыйФайл.Заголовки);
КонструкторЗаписиДанных
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);")
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);"
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(%1 + РазделительСтрок);", ПрочитанныйФайл.ИмяПеременной)
"ЗаписьДанных.ЗаписатьСтроку(%1 + РазделительСтрок);",
ПрочитанныйФайл.ИмяПеременной
)
.ДобавитьКомментарий(
"{t(Текст.Конец)} %1", ПередаваемыйФайл.ИмяПоля);
"{t(Текст.Конец)} %1",
ПередаваемыйФайл.ИмяПоля
);
КонецЦикла;
@@ -788,37 +853,48 @@
Продолжить;
КонецЕсли;
ContentDisposition = ОбщегоНазначения.НайтиВСоответствииПоКлючуБезУчетаРегистра(
ContentDisposition = ОбщийНаборИнструментов.НайтиВСоответствииПоКлючуБезУчетаРегистра(
ПередаваемыйФайл.Заголовки,
"Content-Disposition");
ContentDisposition = ?(ContentDisposition = Неопределено, "form-data", ContentDisposition);
КонструкторЗаписиДанных
.ДобавитьКомментарий(
"{t(Текст.Начало)} %1", ПередаваемыйФайл.ИмяПоля)
"{t(Текст.Начало)} %1",
ПередаваемыйФайл.ИмяПоля
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + РазделительСтрок);", ИмяПараметраРазделитель)
"ЗаписьДанных.ЗаписатьСтроку(""--"" + %1 + РазделительСтрок);",
ИмяПараметраРазделитель
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""Content-Disposition: %1; name=""""%2""""; filename=""""%3"""""" + РазделительСтрок);",
ContentDisposition,
ПередаваемыйФайл.ИмяПоля,
ПередаваемыйФайл.ИмяФайла)
ПередаваемыйФайл.ИмяФайла
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""Content-Type: %1"" + РазделительСтрок);",
?(ЗначениеЗаполнено(ПередаваемыйФайл.ТипMIME), ПередаваемыйФайл.ТипMIME, "application/octet-stream"));
?(ЗначениеЗаполнено(ПередаваемыйФайл.ТипMIME), ПередаваемыйФайл.ТипMIME, "application/octet-stream")
);
ДобавитьЗаголовкиВЗаписьДанныхMultipart(КонструкторЗаписиДанных, ПередаваемыйФайл.Заголовки);
КонструкторЗаписиДанных
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);")
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);"
)
.ДобавитьСтроку(
"ЗаписьДанных.Записать(Новый ДвоичныеДанные(""%1""));",
ПередаваемыйФайл.ПолноеИмяФайла)
ПередаваемыйФайл.ПолноеИмяФайла
)
.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);")
"ЗаписьДанных.ЗаписатьСтроку(РазделительСтрок);"
)
.ДобавитьКомментарий(
"{t(Текст.Конец)} %1", ПередаваемыйФайл.ИмяПоля);
"{t(Текст.Конец)} %1",
ПередаваемыйФайл.ИмяПоля
);
КонецЦикла;
@@ -827,6 +903,7 @@
Процедура ДобавитьЗаголовкиВЗаписьДанныхMultipart(КонструкторЗаписиДанных, Заголовки)
Для Каждого Заголовок Из Заголовки Цикл
Если НРег(Заголовок.Ключ) = "content-disposition" Тогда
Продолжить;
КонецЕсли;
@@ -834,7 +911,9 @@
КонструкторЗаписиДанных.ДобавитьСтроку(
"ЗаписьДанных.ЗаписатьСтроку(""%1: %2"" + РазделительСтрок);",
Заголовок.Ключ,
Заголовок.Значение);
Заголовок.Значение
);
КонецЦикла;
КонецПроцедуры
@@ -860,7 +939,7 @@
Если ЗначениеЗаполнено(ОписаниеЗапроса.FTPАдресОбратногоСоединения)
И Не ОписаниеЗапроса.FTPАдресОбратногоСоединения = "-" Тогда
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка("Адрес из опции -P, --ftp-port было проигнорировано"));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяОшибка("Адрес из опции -P, --ftp-port было проигнорировано"));
КонецЕсли;
Таймаут = 0;
@@ -883,7 +962,8 @@
Конструктор.ДобавитьСтроку(
"%1 = Новый FTPСоединение(%2);",
ИмяПараметраСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецПроцедуры
@@ -906,7 +986,7 @@
ТекстОшибки = "Не определен FTP метод";
КонецЕсли;
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
КонецЕсли;
КонецПроцедуры
@@ -915,7 +995,8 @@
ИмяВыходногоФайла = ?(ЗначениеЗаполнено(ОписаниеРесурса.ИмяВыходногоФайла),
ОписаниеРесурса.ИмяВыходногоФайла,
"path/to/file");
"path/to/file"
);
ПараметрыФункции = Новый Массив;
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(СтруктураURL.Путь));
@@ -924,19 +1005,21 @@
Конструктор.ДобавитьСтроку(
"%1.Получить(%2);",
ИмяПараметраСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецПроцедуры
Процедура ВывестиВызовОтправкиФайлаFTP(ОписаниеРесурса, СтруктураURL)
Для Каждого ПередаваемыйФайл Из ОписаниеРесурса.Файлы Цикл
Если Не ПередаваемыйФайл.ОтправлятьОтдельно Тогда
Продолжить;
КонецЕсли;
Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
АдресРесурса = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
АдресРесурса = ОбщийНаборИнструментов.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
Иначе
АдресРесурса = СтруктураURL.Путь;
КонецЕсли;
@@ -948,7 +1031,9 @@
Конструктор.ДобавитьСтроку(
"%1.Записать(%2);",
ИмяПараметраСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецЦикла;
КонецПроцедуры
@@ -962,7 +1047,8 @@
Конструктор.ДобавитьСтроку(
"Файлы = %1.НайтиФайлы(%2);",
ИмяПараметраСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецПроцедуры
@@ -974,14 +1060,17 @@
Конструктор.ДобавитьСтроку(
"Файл = %1.НайтиФайлы(%2)[0];",
ИмяПараметраСоединение,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
КонецПроцедуры
Функция ИспользуетсяЗащищенноеСоединение(СтруктураURL)
Возврат СтруктураURL.Схема = ПротоколыURL.HTTPS
Или СтруктураURL.Схема = ПротоколыURL.FTPS
Или ЗначениеЗаполнено(ОписаниеЗапроса.ИмяФайлаСертификатаКлиента);
КонецФункции
Функция ПередаваемыйФайлПрочитан(ПередаваемыйФайл)
@@ -52,7 +52,8 @@
ПакетРесурсов = МенеджерРесурсовЛокализации.ПолучитьПакеты(
"Общий, КлючевыеСловаЯзыка, ГенераторПрограммногоКодаКоннекторHTTP",
КодЛокализации);
КодЛокализации
);
ДобавитьЧтениеФайлов();
ДобавитьДанныеЗапроса();
@@ -154,10 +155,13 @@
КонецФункции
Функция ПоддерживаемыеПротоколы() Экспорт
Протоколы = Новый Массив();
Протоколы.Добавить(ПротоколыURL.HTTP);
Протоколы.Добавить(ПротоколыURL.HTTPS);
Возврат Протоколы;
КонецФункции
#КонецОбласти
@@ -230,7 +234,7 @@
КонецЦикла;
Код = КоллекцияПрограммногоКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
Код = ЛокальныйГенераторКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
Если Не ПустаяСтрока(Код) Тогда
Конструктор
@@ -258,7 +262,7 @@
ИначеЕсли ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
ТекстОшибки = "Данные формы невозможно передать в структурированный объект для отправки в КоннекторHTTP";
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяОшибка(ТекстОшибки));
Иначе
@@ -321,9 +325,11 @@
ПараметрыМетода.Добавить(Конструктор.ПараметрВСтроку(Ключ));
ПараметрыМетода.Добавить(Конструктор.НеобязательныйПараметрВСтроку(Значение));
КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2);",
КонструкторДанных.ДобавитьСтроку(
"%1.Вставить(%2);",
ИмяПараметра,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыМетода)
);
КонецЦикла;
@@ -370,15 +376,21 @@
МассивПеременныхФайлов = Данные.Значение;
КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2, Новый Массив());",
КонструкторДанных.ДобавитьСтроку(
"%1.Вставить(%2, Новый Массив());",
ИмяПараметра,
КонструкторДанных.ПараметрВСтроку(ИмяПоля));
КонструкторДанных.ПараметрВСтроку(ИмяПоля)
);
Для Каждого ИмяПеременнойФайла Из МассивПеременныхФайлов Цикл
КонструкторДанных.ДобавитьСтроку("%1[%2].Добавить(%3));",
КонструкторДанных.ДобавитьСтроку(
"%1[%2].Добавить(%3));",
ИмяПараметра,
КонструкторДанных.ПараметрВСтроку(ИмяПоля),
КонструкторДанных.ПараметрВСтроку(ИмяПеременнойФайла));
КонструкторДанных.ПараметрВСтроку(ИмяПеременнойФайла)
);
КонецЦикла;
Иначе
@@ -389,9 +401,11 @@
ПараметрыМетода.Добавить(КонструкторДанных.ПараметрВСтроку(ИмяПоля));
ПараметрыМетода.Добавить(ИмяПеременнойФайла);
КонструкторДанных.ДобавитьСтроку("%1.Вставить(%2);",
КонструкторДанных.ДобавитьСтроку(
"%1.Вставить(%2);",
ИмяПараметра,
КонструкторДанных.ПараметрыФункцииВСтроку(ПараметрыМетода));
КонструкторДанных.ПараметрыФункцииВСтроку(ПараметрыМетода)
);
КонецЕсли;
@@ -401,10 +415,11 @@
Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметра, РезультатСборка)
Сборка = КоллекцияПрограммногоКода.СборкаДанныхЗапросаВСтроку(
Сборка = ЛокальныйГенераторКода.ДанныеЗапроса(
НазначениеДанных,
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
ПрочитанныеФайлы);
ПрочитанныеФайлы
);
Если Не ЗначениеЗаполнено(Сборка) Тогда
Возврат;
@@ -417,7 +432,7 @@
ТекстJson = СтрЗаменить(ТекстJson, Символы.ПС + "|", Символы.ПС);
ТекстJson = СтрЗаменить(ТекстJson, """""", """");
Результат = ОбщегоНазначения.ПопытатьсяПрочитатьJSON(ТекстJson);
Результат = ОбщийНаборИнструментов.ПопытатьсяПрочитатьJSON(ТекстJson);
Если Не Результат = Неопределено Тогда
Конструктор
@@ -426,6 +441,7 @@
РезультатСборка = ИмяПараметра;
Состояние.ТелоЗапросаВJSON = Истина;
Возврат;
КонецЕсли;
@@ -469,7 +485,8 @@
.ДобавитьСтроку("Файл = Новый Структура();")
.ДобавитьСтроку(
"Файл.Вставить(""{t(Параметр.Файл.Имя)}"", %1);",
КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ИмяПоля));
КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ИмяПоля)
);
Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяФайла) Тогда
КонструкторФайлов.ДобавитьСтроку("Файл.Вставить(""{t(Параметр.Файл.ИмяФайла)}"", %1);",
@@ -478,12 +495,14 @@
КонструкторФайлов.ДобавитьСтроку(
"Файл.Вставить(""{t(Параметр.Файл.Данные)}"", Новый ДвоичныеДанные(%1));",
КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)
);
Если ЗначениеЗаполнено(ПередаваемыйФайл.ТипMIME) Тогда
КонструкторФайлов.ДобавитьСтроку(
"Файл.Вставить(""{t(Параметр.Файл.Тип)}"", %1);",
КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ТипMIME));
КонструкторФайлов.ПараметрВСтроку(ПередаваемыйФайл.ТипMIME)
);
КонецЕсли;
Если ЗначениеЗаполнено(ПередаваемыйФайл.Заголовки) Тогда
@@ -496,7 +515,8 @@
КонструкторФайлов.ДобавитьСтроку(
"Файл.{t(Параметр.Заголовки)}.{t(Структура.Вставить)}(%1);",
КонструкторФайлов.ПараметрыФункцииВСтроку(ПараметрыМетода));
КонструкторФайлов.ПараметрыФункцииВСтроку(ПараметрыМетода)
);
КонецЦикла;
КонецЕсли;
@@ -505,12 +525,14 @@
КонецЦикла;
Если Не КонструкторФайлов.Пустой() Тогда
Состояние.ЕстьФайлыMultipart = Истина;
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку("%1 = Новый Массив();", ИмяПараметраФайлы)
.ДобавитьСтроку(КонструкторФайлов.ПолучитьРезультат());
КонецЕсли;
КонецПроцедуры
@@ -519,20 +541,7 @@
ДлинаИмениФайлаВКомментарии = 100;
ВсеФайлы = Новый Массив();
ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеЗапроса.Файлы);
ОбщегоНазначения.ДополнитьМассив(ВсеФайлы, ОписаниеРесурса.Файлы);
ПередаваемыеФайлы = Новый Массив();
Для Каждого ПередаваемыйФайл Из ВсеФайлы Цикл
Если ПередаваемыйФайл.ОтправлятьОтдельно
И Не ПередаваемыйФайл.ПрочитатьСодержимое
И ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
ПередаваемыеФайлы.Добавить(ПередаваемыйФайл);
КонецЕсли;
КонецЦикла;
ПередаваемыеФайлы = ОписаниеЗапроса.ФайлыОтправляемыеОтдельно(ОписаниеРесурса);
КоличествоФайлов = ПередаваемыеФайлы.Количество();
НомерФайла = 0;
@@ -546,18 +555,20 @@
.ДобавитьПустуюСтроку()
.ДобавитьКомментарий("{t(Текст.ПередачаФайла)} %1. %2",
НомерФайла,
ИмяФайла);
ИмяФайла
);
КонецЕсли;
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
СтруктураURL.Путь = ОбщегоНазначения.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
СтруктураURL.Путь = ОбщийНаборИнструментов.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
КонецЕсли;
Конструктор.ДобавитьСтроку(
"%1 = Новый ДвоичныеДанные(%2);",
ИмяПараметраДанныеЗапроса,
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)
);
ДобавитьВызовМетода(ОписаниеРесурса, СтруктураURL, ИмяПараметраДанныеЗапроса);
@@ -591,7 +602,8 @@
"%1 = Новый Структура(""{t(Параметр.Пользователь)}, {t(Параметр.Пароль)}"", %2, %3);",
ИмяПараметраАутентификация,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя),
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)
);
КонецПроцедуры
@@ -611,7 +623,8 @@
"%1 = Новый Структура(""{t(Параметр.Аутентификация.Тип)}, {t(Параметр.Пользователь)}, {t(Параметр.Пароль)}"", ""Digest"", %2, %3);",
ИмяПараметраАутентификация,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяПользователя),
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПарольПользователя)
);
КонецПроцедуры
@@ -626,7 +639,8 @@
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(
"%1 = Новый Структура(""{t(Параметр.ИспользоватьАутентификациюОС)}"", Истина);",
ИмяПараметраАутентификация);
ИмяПараметраАутентификация
);
КонецПроцедуры
@@ -640,26 +654,32 @@
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(
"%1 = Новый Структура();",
ИмяПараметраАутентификация)
ИмяПараметраАутентификация
)
.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.Аутентификация.Тип)}"", ""AWS4-HMAC-SHA256"");",
ИмяПараметраАутентификация)
ИмяПараметраАутентификация
)
.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.AWS4.ИдентификаторКлючаДоступа)}"", %2);",
ИмяПараметраАутентификация,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.КлючДоступа))
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.КлючДоступа)
)
.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.AWS4.СекретныйКлюч)}"", %2);",
ИмяПараметраАутентификация,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.СекретныйКлюч))
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.СекретныйКлюч)
)
.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.AWS4.Сервис)}"", %2);",
ИмяПараметраАутентификация,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.Сервис))
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.Сервис)
)
.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.AWS4.Регион)}"", %2);",
ИмяПараметраАутентификация,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.Регион));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.AWS4.Регион)
);
КонецПроцедуры
@@ -674,7 +694,8 @@
.ДобавитьСтроку(
"%1 = Новый Структура(""{t(Параметр.Bearer.Токен)}, {t(Параметр.Аутентификация.Тип)}"", %2, ""Bearer"");",
ИмяПараметраАутентификация,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ТокенBearer));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ТокенBearer)
);
КонецПроцедуры
@@ -684,15 +705,15 @@
Возврат;
КонецЕсли;
Если Не ОбщегоНазначения.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда
Если Не ОбщийНаборИнструментов.ПротоколПроксиПоддерживатся(ОписаниеЗапроса.ПроксиПротокол) Тогда
ТекстОшибки = СтрШаблон("Прокси протокол %1 не поддерживается", ОписаниеЗапроса.ПроксиПротокол);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
Конструктор
.ДобавитьПустуюСтроку()
.ДобавитьСтроку(КоллекцияПрограммногоКода.СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
.ДобавитьСтроку(ЛокальныйГенераторКода.ИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
КонецПроцедуры
@@ -709,17 +730,19 @@
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
Состояние.ВызванМетодПоТекущемуURL = Ложь;
Если Не ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда
Если Не ОбщийНаборИнструментов.ЭтоHTTP(СтруктураURL.Схема) Тогда
ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
КонецЕсли;
Конструктор.ДобавитьПустуюСтроку();
Если КоличествоURL > 1 Тогда
Конструктор.ДобавитьКомментарий("{t(Текст.Запрос)} %1. %2",
Конструктор.ДобавитьКомментарий(
"{t(Текст.Запрос)} %1. %2",
НомерЗапроса,
Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии));
Лев(ОписаниеРесурса.URL, МаксимальнаяДлинаАдресаВКомментарии)
);
КонецЕсли;
ДобавитьПоследовательнуюОтправкуДвоичныхДанныхРесурса(ОписаниеРесурса);
@@ -728,7 +751,7 @@
ДобавитьВызовМетода(ОписаниеРесурса);
КонецЕсли;
Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Конструктор.Очистить();
Возврат;
КонецЕсли;
@@ -786,9 +809,11 @@
ПараметрыФункции.Добавить(ИмяПараметраДополнительныеПараметры);
КонецЕсли;
Конструктор.ДобавитьСтроку("{t(Переменная.Результат)} = {t(КоннекторHTTP)}.%1(%2);",
Конструктор.ДобавитьСтроку(
"{t(Переменная.Результат)} = {t(КоннекторHTTP)}.%1(%2);",
ИмяФункции,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
Состояние.ВызванМетодПоТекущемуURL = Истина;
@@ -801,19 +826,27 @@
Если Состояние.ПереданаСтрокаЗапроса
И ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
URLСборка = КоллекцияПрограммногоКода.СборкаURL(СтруктураURL);
URLСборка = ЛокальныйГенераторКода.URL(СтруктураURL);
Иначе
URLСборка = КоллекцияПрограммногоКода.СборкаURL(СтруктураURL,
URLСборка = ЛокальныйГенераторКода.URL(
СтруктураURL,
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
ПрочитанныеФайлы);
ПрочитанныеФайлы
);
КонецЕсли;
Если СтрЧислоСтрок(URLСборка) > 1 Тогда
Конструктор
.ДобавитьСтроку("%1 = %2;", ИмяПараметраURL, URLСборка)
.ДобавитьПустуюСтроку();
URLСборка = ИмяПараметраURL;
КонецЕсли;
КонецПроцедуры
@@ -836,12 +869,14 @@
ДобавитьФайлыВДополнительныеПараметры(КонструкторДопПараметров);
Если Не КонструкторДопПараметров.Пустой() Тогда
Состояние.ЕстьДополнительныеПараметры = Истина;
Конструктор
.ДобавитьСтроку("%1 = Новый Структура();", ИмяПараметраДополнительныеПараметры)
.ДобавитьСтроку(КонструкторДопПараметров.ПолучитьРезультат())
.ДобавитьПустуюСтроку();
КонецЕсли;
КонецПроцедуры
@@ -855,7 +890,8 @@
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.Заголовки)}"", %2);",
ИмяПараметраДополнительныеПараметры,
ИмяПараметраЗаголовки);
ИмяПараметраЗаголовки
);
КонецПроцедуры
@@ -868,7 +904,8 @@
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.Прокси)}"", %2);",
ИмяПараметраДополнительныеПараметры,
ИмяПараметраПрокси);
ИмяПараметраПрокси
);
КонецПроцедуры
@@ -881,7 +918,8 @@
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.Аутентификация)}"", %2);",
ИмяПараметраДополнительныеПараметры,
ИмяПараметраАутентификация);
ИмяПараметраАутентификация
);
КонецПроцедуры
@@ -897,7 +935,8 @@
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.Таймаут)}"", %2);",
ИмяПараметраДополнительныеПараметры,
Конструктор.ПараметрВСтроку(Таймаут));
Конструктор.ПараметрВСтроку(Таймаут)
);
КонецПроцедуры
@@ -909,7 +948,8 @@
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.ПроверятьSSL)}"", Новый СертификатыУдостоверяющихЦентровФайл(%2));",
ИмяПараметраДополнительныеПараметры,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяФайлаСертификатовУЦ));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ИмяФайлаСертификатовУЦ)
);
КонецЕсли;
@@ -923,7 +963,8 @@
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.КлиентскийСертификатSSL)}"", Новый СертификатКлиентаФайл(%2));",
ИмяПараметраДополнительныеПараметры,
КонструкторДопПараметров.ПараметрыФункцииВСтроку(ПараметрыОбъекта));
КонструкторДопПараметров.ПараметрыФункцииВСтроку(ПараметрыОбъекта)
);
КонецЕсли;
@@ -934,10 +975,13 @@
Если Состояние.ПереданаСтрокаЗапроса
И ВозможнаПередачаДанныхЧерезСоответствие(НазначенияПередаваемыхДанных.СтрокаЗапроса)
И Не ВозможноПередатьПараметрыЗапросаВПараметрыФункцииВызоваМетода(ОписаниеРесурса.Метод) Тогда
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.ПараметрыЗапроса)}"", %2);",
ИмяПараметраДополнительныеПараметры,
ИмяПараметраПараметрыЗапроса);
ИмяПараметраПараметрыЗапроса
);
КонецЕсли;
КонецПроцедуры
@@ -953,14 +997,16 @@
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""Json"", %2);",
ИмяПараметраДополнительныеПараметры,
ДанныеЗапроса);
ДанныеЗапроса
);
ИначеЕсли Не ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(ОписаниеРесурса.Метод) Тогда
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.Данные)}"", %2);",
ИмяПараметраДополнительныеПараметры,
ДанныеЗапроса);
ДанныеЗапроса
);
КонецЕсли;
@@ -969,10 +1015,13 @@
Процедура ДобавитьФайлыВДополнительныеПараметры(КонструкторДопПараметров)
Если Состояние.ЕстьФайлыMultipart Тогда
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.Файлы)}"", %2);",
ИмяПараметраДополнительныеПараметры,
ИмяПараметраФайлы);
ИмяПараметраФайлы
);
КонецЕсли;
КонецПроцедуры
@@ -980,9 +1029,12 @@
Процедура ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров)
Если ОписаниеЗапроса.ЗапретитьПеренаправление Тогда
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.РазрешитьПеренаправление)}"", Ложь);",
ИмяПараметраДополнительныеПараметры);
ИмяПараметраДополнительныеПараметры
);
КонецЕсли;
КонецПроцедуры
@@ -990,17 +1042,23 @@
Процедура ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров)
Если ОписаниеЗапроса.МаксимальноеКоличествоПовторов > 0 Тогда
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.МаксимальноеКоличествоПовторов)}"", %2);",
ИмяПараметраДополнительныеПараметры,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеКоличествоПовторов));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеКоличествоПовторов)
);
КонецЕсли;
Если ОписаниеЗапроса.МаксимальноеВремяПовторов > 0 Тогда
КонструкторДопПараметров.ДобавитьСтроку(
"%1.Вставить(""{t(Параметр.МаксимальноеВремяПовторов)}"", %2);",
ИмяПараметраДополнительныеПараметры,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеВремяПовторов));
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеВремяПовторов)
);
КонецЕсли;
КонецПроцедуры
@@ -1084,12 +1142,20 @@
Значение = НРег(Заголовок.Значение);
Если Имя = "content-type" Тогда
Если Состояние.ПереданоТелоЗапроса
И Значение = "application/x-www-form-urlencoded" Тогда
Возврат Ложь;
КонецЕсли;
ИначеЕсли Имя = "authorization" И СтрНачинаетсяС(Значение, "bearer ") Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
Возврат Истина;
@@ -56,7 +56,7 @@
Если АргументыКоманд.Количество() = 0 Тогда
Текст = "Передана пустая команда";
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(Текст));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(Текст));
Возврат ПустойРезультат;
КонецЕсли;
@@ -73,15 +73,16 @@
ПроверитьПоддержкуПротокола(ОписаниеЗапроса, Генератор.ПоддерживаемыеПротоколы());
СгенерированныйКод = "";
Если Не ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если Не ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
СгенерированныйКод = Генератор.Получить(ОписаниеЗапроса, ИсходящиеОшибки);
КонецЕсли;
ВывестиСгенерированныйКодКоманды(Результат, СгенерированныйКод, НомерКоманды, КоличествоКоманд);
Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Возврат ПустойРезультат;
КонецЕсли;
КонецЦикла;
Возврат Результат;
@@ -107,11 +108,14 @@
ПоддерживаемыеОпции = Новый Массив();
Для Каждого КлючЗначение Из ОписаниеОпций Цикл
ИмяОпции = КлючЗначение.Ключ;
Описание = КлючЗначение.Значение;
Если Описание.Поддерживается Тогда
ПоддерживаемыеОпции.Добавить(ИмяОпции);
КонецЕсли;
КонецЦикла;
Возврат ПоддерживаемыеОпции;
@@ -186,6 +190,7 @@
ОшибочныеМетоды = "";
Если ЕстьМетодPUT Тогда
Если ЕстьМетодGET И ЕстьДанныеPOST Тогда
ОшибочныеМетоды = "PUT и GET";
ИначеЕсли ЕстьМетодPOST Тогда
@@ -193,21 +198,31 @@
ИначеЕсли ЕстьМетодHEAD Тогда
ОшибочныеМетоды = "PUT и HEAD";
КонецЕсли;
ИначеЕсли ЕстьМетодPOST Тогда
Если ЕстьМетодHEAD Тогда
ОшибочныеМетоды = "POST и HEAD";
КонецЕсли;
КонецЕсли;
Если Не ПустаяСтрока(ОшибочныеМетоды) Тогда
ТекстОшибки = СтрШаблон("Запрещено одновременное использование нескольких HTTP методов %1 для URL %2",
ОшибочныеМетоды, ОписаниеРесурса.URL);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ТекстОшибки = СтрШаблон(
"Запрещено одновременное использование нескольких HTTP методов %1 для URL %2",
ОшибочныеМетоды,
ОписаниеРесурса.URL
);
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
Если ОбщегоНазначения.ЭтоHTTP(СтруктураURL.Схема) Тогда
Если ОбщийНаборИнструментов.ЭтоHTTP(СтруктураURL.Схема) Тогда
Если ЕстьМетодPOST Тогда
Метод = "POST";
ИначеЕсли ЕстьМетодPUT Тогда
@@ -217,7 +232,9 @@
Иначе
Метод = "GET";
КонецЕсли;
ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда
ИначеЕсли ОбщийНаборИнструментов.ЭтоFTP(СтруктураURL.Схема) Тогда
Если Файлы.Количество() Тогда
Метод = "STOR"; // Залить файл
ИначеЕсли ЕстьМетодHEAD Тогда
@@ -227,6 +244,7 @@
Иначе
Метод = "RETR"; // Скачать файл
КонецЕсли;
КонецЕсли;
ОписаниеРесурса.Метод = Метод;
@@ -238,8 +256,8 @@
Процедура ПрочитатьАдресаРесурсов()
МассивURL = Новый Массив;
ОбщегоНазначения.ДополнитьМассив(МассивURL, ТекущаяКоманда.ЗначениеАргумента("URL"));
ОбщегоНазначения.ДополнитьМассив(МассивURL, ЗначениеОпции("url"));
ОбщийНаборИнструментов.ДополнитьМассив(МассивURL, ТекущаяКоманда.ЗначениеАргумента("URL"));
ОбщийНаборИнструментов.ДополнитьМассив(МассивURL, ЗначениеОпции("url"));
Для Каждого URL Из МассивURL Цикл
ОписаниеЗапроса.ДобавитьАдресРесурса(URL);
@@ -251,24 +269,25 @@
ИменаВыходныхФайлов = ЗначениеОпции("output");
ПризнакиИзвлеченияИмениФайлаИзURL = ЗначениеОпции("remote-name");
ИзвлекатьИмяФайлаИзURLДляВсех = УстановленФлагОпции("remote-name-all");
ИзвлекатьДляВсехИмяФайлаИзURL = УстановленФлагОпции("remote-name-all");
Если ИменаВыходныхФайлов.Количество() И ПризнакиИзвлеченияИмениФайлаИзURL.Количество() Тогда
ТекстОшибки = "Одновременная передача опций -o (--output) и -O (--remote-name) не поддерживается";
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
// Имя файла из опции
Индекс = 0;
Для Каждого ИмяВыходногоФайла Из ИменаВыходныхФайлов Цикл
Если Индекс > ОписаниеЗапроса.АдресаРесурсов.ВГраница() Тогда
Прервать;
КонецЕсли;
Если ЗначениеЗаполнено(КаталогСохраненияФайлов) Тогда
ИмяВыходногоФайла =
ОбщегоНазначения.ДобавитьКонечныйРазделительПути(КаталогСохраненияФайлов)
ОбщийНаборИнструментов.ДобавитьКонечныйРазделительПути(КаталогСохраненияФайлов)
+ ИмяВыходногоФайла;
КонецЕсли;
@@ -276,6 +295,7 @@
ОписаниеАдреса.ИмяВыходногоФайла = ИмяВыходногоФайла;
Индекс = Индекс + 1;
КонецЦикла;
// Имя файла из URL
@@ -283,7 +303,7 @@
ИзвлекатьИмяИзURL = Индекс <= ПризнакиИзвлеченияИмениФайлаИзURL.ВГраница()
И ПризнакиИзвлеченияИмениФайлаИзURL[Индекс]
Или ИзвлекатьИмяФайлаИзURLДляВсех;
Или ИзвлекатьДляВсехИмяФайлаИзURL;
Если Не ИзвлекатьИмяИзURL Тогда
Продолжить;
@@ -305,13 +325,13 @@
Если Не ЗначениеЗаполнено(ИмяВыходногоФайла) Тогда
ТекстОшибки = СтрШаблон("Не удалось получить имя файла из URL %1", ОписаниеАдреса.URL);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(КаталогСохраненияФайлов) Тогда
ИмяВыходногоФайла =
ОбщегоНазначения.ДобавитьКонечныйРазделительПути(КаталогСохраненияФайлов)
ОбщийНаборИнструментов.ДобавитьКонечныйРазделительПути(КаталогСохраненияФайлов)
+ ИмяВыходногоФайла;
КонецЕсли;
@@ -351,11 +371,13 @@
КонецПроцедуры
Процедура ДополнитьЗаголовкиПриНаличииОпцииГруппыData()
Если ЕстьОпцииГруппыData()
И Не УстановленФлагОпции("get")
И Не ЗначениеЗаполнено(ОписаниеЗапроса.ЗначениеЗаголовка("Content-Type")) Тогда
ОписаниеЗапроса.ДобавитьЗаголовок("Content-Type", "application/x-www-form-urlencoded");
КонецЕсли;
КонецПроцедуры
Процедура ДополнитьЗаголовокUserAgent()
@@ -401,7 +423,6 @@
КонецФункции
Процедура ПрочитатьТипАутентификации()
ЕстьBasic = УстановленФлагОпции("basic");
@@ -411,11 +432,16 @@
AWS4 = ПоследнееЗначениеОпции("aws-sigv4");
ТокенBearer = ПоследнееЗначениеОпции("oauth2-bearer");
МножественноеИспользование = ЕстьBasic + ЕстьDigest + ЕстьNTLM + ЕстьNegotiate + ЗначениеЗаполнено(AWS4) + ЗначениеЗаполнено(ТокенBearer);
МножественноеИспользование = ЕстьBasic
+ ЕстьDigest
+ ЕстьNTLM
+ ЕстьNegotiate
+ ЗначениеЗаполнено(AWS4)
+ ЗначениеЗаполнено(ТокенBearer);
Если МножественноеИспользование > 1 Тогда
ТекстОшибки = "Запрещено использовать несколько типов аутентификации";
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
@@ -499,7 +525,7 @@
ПрочитатьDataBinary();
ПрочитатьDataUrlencode();
ПрочитатьUploadFile();
ПрочитатьОпициюJson();
ПрочитатьОпциюJson();
ПрочитатьForm();
ПрочитатьFormString();
@@ -527,6 +553,7 @@
МассивДанныхПолей = СтрРазделить(Данные, "&");
Для Каждого ДанныеПоля Из МассивДанныхПолей Цикл
ПозицияРавенства = СтрНайти(ДанныеПоля, "=");
Если ПозицияРавенства Тогда
@@ -541,6 +568,7 @@
ПередаваемыйТекст.ИмяПоля = ИмяПоля;
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
КонецЦикла;
КонецЕсли;
@@ -566,16 +594,22 @@
МассивДанных = ЗначениеОпции("data-binary");
Назначение = НазначениеПередаваемыхДанных();
Для Каждого Данные Из МассивДанных Цикл
Для Каждого Данные Из МассивДанных Цикл
Если Лев(Данные, 1) = "@" Тогда
ИмяФайла = Сред(Данные, 2);
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение);
ПередаваемыйФайл.ПрочитатьСодержимое = Истина;
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
Иначе
ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение);
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
@@ -636,19 +670,24 @@
Процедура ПрочитатьUploadFile()
МассивДанных = ЗначениеОпции("T"); // -T, --upload-file
ФигурныеСкобки = "{}";
ФигурныеСкобки = "{}";
Индекс = -1;
Для Каждого Значение Из МассивДанных Цикл
Индекс = Индекс + 1;
Значение = СокрЛП(Значение);
Если Индекс > ОписаниеЗапроса.АдресаРесурсов.ВГраница() Тогда
ТекстОшибки = СтрШаблон(
"Файл '%1' из опции -T, --upload-file был проигнорирован, т.к. отсутствует URL для файла",
Значение);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка(ТекстОшибки));
Значение
);
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяОшибка(ТекстОшибки));
Продолжить;
КонецЕсли;
ОписаниеРесурса = ОписаниеЗапроса.АдресаРесурсов[Индекс];
@@ -658,16 +697,24 @@
МассивФайлов = Новый Массив();
Если ПервыйСимвол = "{" И ПоследнийСимвол = "}" Тогда
ЗначениеБезСкобок = Сред(Значение, 2, СтрДлина(Значение) - 2);
МассивФайлов = СтрРазделить(ЗначениеБезСкобок, ",");
ИначеЕсли СтрНайти(ФигурныеСкобки, ПервыйСимвол) Или СтрНайти(ФигурныеСкобки, ПоследнийСимвол) Тогда
ТекстОшибки = СтрШаблон(
"Неправильное использование фигурных скобок в значении '%1' опции -T, --upload-file",
Значение);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
Значение
);
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
МассивФайлов.Добавить(Значение);
Иначе
МассивФайлов.Добавить(Значение);
КонецЕсли;
Для Каждого ПутьКФайлу Из МассивФайлов Цикл
@@ -681,7 +728,7 @@
КонецПроцедуры
Процедура ПрочитатьОпициюJson()
Процедура ПрочитатьОпциюJson()
МассивДанных = ЗначениеОпции("json");
Назначение = НазначениеПередаваемыхДанных();
@@ -689,6 +736,7 @@
Для Каждого Данные Из МассивДанных Цикл
Если Лев(Данные, 1) = "@" Тогда
ИмяФайла = Сред(Данные, 2);
ПередаваемыйФайл = Новый ПередаваемыйФайл(ИмяФайла, Назначение);
@@ -696,10 +744,13 @@
ПередаваемыйФайл.РазделительТелаЗапроса = "";
ОписаниеЗапроса.Файлы.Добавить(ПередаваемыйФайл);
Иначе
ПередаваемыйТекст = Новый ПередаваемыйТекст(Данные, Назначение);
ПередаваемыйТекст.РазделительТелаЗапроса = "";
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйТекст);
КонецЕсли;
КонецЦикла;
@@ -728,19 +779,21 @@
Если ДанныеПоляФормы.Значения.Количество() = 0 Тогда
ТекстОшибки = СтрШаблон("В опции -F (--form) некорректно указано значение: '%1'", Данные);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
ЭтоФайл = Ложь;
Для Каждого ОписаниеЗначения Из ДанныеПоляФормы.Значения Цикл
ТипMIME = ОписаниеЗначения.Параметры["type"];
ПервыйСимвол = Лев(ОписаниеЗначения.Значение, 1);
ЕстьСимволОпределенияФайла = ПервыйСимвол = "@" Или ПервыйСимвол = "<";
ЭтоФайл = ЭтоФайл Или ЕстьСимволОпределенияФайла;
Если ЭтоФайл Тогда
Если ЕстьСимволОпределенияФайла Тогда
ПолноеИмяФайла = Сред(ОписаниеЗначения.Значение, 2);
Иначе
@@ -771,7 +824,9 @@
ПередаваемыйЭлемент.ТипMIME = ТипMIME;
КонецЕсли;
КонецЕсли;
Иначе
ПередаваемыйЭлемент = Новый ПередаваемыйТекст(ОписаниеЗначения.Значение, Назначение);
ПередаваемыйЭлемент.ИмяПоля = ДанныеПоляФормы.ИмяПоля;
ПередаваемыйЭлемент.Заголовки = ОписаниеЗначения.Параметры["headers"];
@@ -781,6 +836,7 @@
КонецЕсли;
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные.Добавить(ПередаваемыйЭлемент);
КонецЕсли;
КонецЦикла;
@@ -801,7 +857,7 @@
Если ПозицияРавенства = 0 Тогда
ТекстОшибки = СтрШаблон("В опции --form-string некорректно указано значение: '%1'", Данные);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
@@ -1026,11 +1082,13 @@
КонецПроцедуры
Функция НазначениеПередаваемыхДанных()
Если УстановленФлагОпции("get") Тогда
Возврат НазначенияПередаваемыхДанных.СтрокаЗапроса;
Иначе
Возврат НазначенияПередаваемыхДанных.ТелоЗапроса;
КонецЕсли;
КонецФункции
Функция ПолучитьКонсольноеПриложение()
@@ -1197,7 +1255,7 @@
ДобавитьПоддерживаемуюОпцию(
"form-string",
"Передаваемые данные по HTTP POST без интерпретации спецтальных сиволов (multipart/form-data)").ТМассивСтрок();
"Передаваемые данные по HTTP POST без интерпретации специальных символов (multipart/form-data)").ТМассивСтрок();
ДобавитьПоддерживаемуюОпцию(
"basic",
@@ -1455,6 +1513,7 @@
КонецФункции
Функция ДобавитьОпциюВКонсольноеПриложение(Наименования, Поддерживается, Описание = "")
Опция = КонсольноеПриложение.Опция(Наименования, , Описание);
Описание = Новый Структура();
@@ -1468,6 +1527,7 @@
КонецЦикла;
Возврат Опция;
КонецФункции
Процедура ОбработатьАргументыКоманды(АргументыКоманды, НомерКоманды, КоличествоКоманд)
@@ -1497,7 +1557,7 @@
Если Инд Тогда
Опция = СокрЛП(Сред(Текст, Инд + СтрДлина(ПодстрокаПоиска)));
ТекстОшибки = СтрШаблон("Опция %1 неизвестна", Опция);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
@@ -1506,11 +1566,11 @@
Инд = СтрНайти(Текст, ":");
Если СтрНайти(Текст, ПодстрокаПоиска) И Инд Тогда
ТекстОшибки = СокрЛП(Сред(Текст, Инд + 1));
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(Текст));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(Текст));
КонецПроцедуры
@@ -1543,15 +1603,16 @@
Значение = ЗначениеОпции(Наименование);
Если ЗначениеЗаполнено(Значение) Тогда
ТекстОшибки = СтрШаблон("Опция %1 не поддерживается", СтрСоединить(Описание.Наименования, ", "));
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяОшибка(ТекстОшибки));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЧтоКомандаНачинаетсяСCurl(АргументыКоманды, НомерКоманды, КоличествоКоманд)
Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Возврат;
КонецЕсли;
@@ -1559,11 +1620,13 @@
НомерКомандыТекст = ?(КоличествоКоманд > 1, СтрШаблон("#%1 ", НомерКоманды), "");
Текст = СтрШаблон("Команда %1должна начинаться с ""curl"", но вместо этого начинается с %2",
НомерКомандыТекст,
АргументыКоманды[0]);
Текст = СтрШаблон(
"Команда %1должна начинаться с ""curl"", но вместо этого начинается с %2",
НомерКомандыТекст,
АргументыКоманды[0]
);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(Текст));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(Текст));
КонецЕсли;
@@ -1571,12 +1634,12 @@
Процедура ПроверитьНаличиеURL(ОписаниеЗапроса)
Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Возврат;
КонецЕсли;
Если ОписаниеЗапроса.АдресаРесурсов.Количество() = 0 Тогда
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка("Не указан URL"));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка("Не указан URL"));
Возврат;
КонецЕсли;
@@ -1585,7 +1648,7 @@
ПорядковыйНомер = ПорядковыйНомер + 1;
Если Не ЗначениеЗаполнено(ОписаниеРесурса.URL) Тогда
ТекстОшибки = СтрШаблон("Не указан URL #%1", ПорядковыйНомер);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
КонецЕсли;
КонецЦикла;
@@ -1593,7 +1656,7 @@
Процедура ПроверитьПоддержкуПротокола(ОписаниеЗапроса, ПоддерживаемыеПротоколы)
Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Возврат;
КонецЕсли;
@@ -1601,7 +1664,7 @@
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
Если ПоддерживаемыеПротоколы.Найти(СтруктураURL.Схема) = Неопределено Тогда
ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема);
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
КонецЕсли;
КонецЦикла;
@@ -1613,19 +1676,19 @@
Если ЕстьОпцииГруппыData() И ЕстьОпцииГруппыForm() Тогда
ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-d (--data)", "-F (--form)");
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
Если ЕстьОпцииГруппыForm() И УстановленФлагОпции( "head") Тогда
ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-I (--head)", "-F (--form)");
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
Если ЕстьОпции("upload-file") И ЕстьОпцииГруппыForm() Тогда
ТекстОшибки = СтрШаблон(ШаблонОдновременнаяПередача, "-T (--upload-file)", "-F (--form)");
ИсходящиеОшибки.Добавить(ОбщегоНазначения.НоваяКритичнаяОшибка(ТекстОшибки));
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
Возврат;
КонецЕсли;
@@ -1643,13 +1706,15 @@
+ ?(НомерКоманды > 1, Символы.ПС + Символы.ПС, "")
+ СтрШаблон(
"//////////////////////////////////////////////
|// %1 #%2.", ПакетРесурсов.ПолучитьСтроку("Текст.Команда"), НомерКоманды);
|// %1 #%2.", ПакетРесурсов.ПолучитьСтроку("Текст.Команда"),
НомерКоманды
);
КонецПроцедуры
Процедура ВывестиСгенерированныйКодКоманды(Результат, Код, НомерКоманды, КоличествоКоманд)
Если ОбщегоНазначения.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Если ОбщийНаборИнструментов.ЕстьКритичныеОшибки(ИсходящиеОшибки) Тогда
Возврат;
КонецЕсли;
@@ -1662,12 +1727,15 @@
КонецПроцедуры
Функция ЕстьОпции(Опции)
Для Каждого Опция Из СтрРазделить(Опции, ",") Цикл
Если ЗначениеЗаполнено(ЗначениеОпции(Опция)) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
Функция ЕстьОпцииГруппыData()
@@ -1679,15 +1747,18 @@
КонецФункции
Функция УстановленФлагОпции(ИмяОпции)
Значение = ПоследнееЗначениеОпции(ИмяОпции);
Если Не Значение = Неопределено Тогда
Возврат Значение;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Функция ПоследнееЗначениеОпции(ИмяОпции)
Значение = ЗначениеОпции(ИмяОпции);
Если ТипЗнч(Значение) = Тип("Массив") Тогда
Если Значение.Количество() Тогда
@@ -1696,6 +1767,7 @@
Иначе
Возврат Значение;
КонецЕсли;
КонецФункции
Функция ЗначениеОпции(ИмяОпции)
@@ -261,10 +261,12 @@
КонецФункции
Процедура УдалитьПустуюПоследнююКоманду()
Если АргументыКоманд.Количество() И
АргументыКоманд[АргументыКоманд.ВГраница()].Количество() = 0 Тогда
Если АргументыКоманд.Количество()
И АргументыКоманд[АргументыКоманд.ВГраница()].Количество() = 0 Тогда
АргументыКоманд.Удалить(АргументыКоманд.ВГраница());
КонецЕсли;
КонецПроцедуры
#КонецОбласти
+8 -9
View File
@@ -402,10 +402,10 @@
</style>
<script type="module">
import theme from '/static/shiki/themes/github-light.js';
import lang from '/static/shiki/langs/bsl.js';
import { createHighlighterCore } from '/static/shiki/core.js';
import { createOnigurumaEngine } from '/static/shiki/engine/oniguruma.js';
import theme from './static/shiki/themes/github-light.js';
import lang from './static/shiki/langs/bsl.js';
import { createHighlighterCore } from './static/shiki/core.js';
import { createOnigurumaEngine } from './static/shiki/engine/oniguruma.js';
let defaultOutputs = {
'1c': {
@@ -442,7 +442,6 @@
let req = new XMLHttpRequest();
req.onload = function () {
let output = document.getElementById("output");
let errors = [];
outputText = "";
@@ -548,9 +547,9 @@
function getLang() {
let radios = document.getElementsByName('lang');
for (let i = 0; i < radios.length; i++) {
if (radios[i].checked) {
return radios[i].value;
for (let radio of radios) {
if (radio.checked) {
return radio.value;
}
}
@@ -640,7 +639,7 @@
const highlighter = await createHighlighterCore({
themes: [theme],
langs: [lang],
engine: createOnigurumaEngine(import('/static/shiki/wasm.js'))
engine: createOnigurumaEngine(import('./static/shiki/wasm.js'))
});
setLocale('ru');
@@ -41,10 +41,13 @@
#Область ПрограммныйИнтерфейс
Процедура ДобавитьАдресРесурса(URL, ИмяВыходногоФайла = "") Экспорт
ОписаниеРесурса = НовоеОписаниеРесурса();
ОписаниеРесурса.URL = URL;
ОписаниеРесурса.ИмяВыходногоФайла = ИмяВыходногоФайла;
АдресаРесурсов.Добавить(ОписаниеРесурса);
КонецПроцедуры
Процедура ДобавитьЗаголовок(Имя, Значение) Экспорт
@@ -58,10 +61,27 @@
Возврат Значение;
КонецЕсли;
Возврат ОбщегоНазначения.НайтиВСоответствииПоКлючуБезУчетаРегистра(Заголовки, Имя);
Возврат ОбщийНаборИнструментов.НайтиВСоответствииПоКлючуБезУчетаРегистра(Заголовки, Имя);
КонецФункции
Функция ФайлыОтправляемыеОтдельно(ОписаниеРесурса) Экспорт
ПередаваемыеФайлы = Новый Массив();
Для Каждого ПередаваемыйФайл Из ОписаниеРесурса.Файлы Цикл
Если ПередаваемыйФайл.ОтправлятьОтдельно
И Не ПередаваемыйФайл.ПрочитатьСодержимое
И ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса Тогда
ПередаваемыеФайлы.Добавить(ПередаваемыйФайл);
КонецЕсли;
КонецЦикла;
Возврат ПередаваемыеФайлы;
КонецФункции
Функция ИспользуетсяПрокси() Экспорт
Возврат ЗначениеЗаполнено(ПроксиСервер);
КонецФункции
@@ -79,6 +99,7 @@
#Область СлужебныеПроцедурыИФункции
Процедура ПриСозданииОбъекта()
АдресаРесурсов = Новый Массив;
Заголовки = Новый Соответствие();
ТипАутентификации = "";
@@ -108,6 +129,7 @@
AWS4 = НовыйAWS4();
ТокенBearer = "";
СоздатьКаталогСохраненияФайлов = Ложь;
КонецПроцедуры
Функция ЕстьДанныеПоНазначению(Назначение) Экспорт
@@ -129,21 +151,27 @@
КонецФункции
Функция НовоеОписаниеРесурса()
Описание = Новый Структура();
Описание.Вставить("URL", "");
Описание.Вставить("Метод", "");
Описание.Вставить("ИмяВыходногоФайла", "");
Описание.Вставить("Файлы", Новый Массив());
Возврат Описание;
КонецФункции
Функция НовыйAWS4()
Результат = Новый Структура;
Результат.Вставить("КлючДоступа", "");
Результат.Вставить("СекретныйКлюч", "");
Результат.Вставить("Сервис", "");
Результат.Вставить("Регион", "");
Возврат Результат;
КонецФункции
#КонецОбласти
+18 -1
View File
@@ -50,11 +50,14 @@
АутентификацияСтрока = "";
РазбитьСтрокуПоРазделителю(АутентификацияСтрока, URL, "@");
Если ЗначениеЗаполнено(АутентификацияСтрока) Тогда
АутентификацияЧасти = СтрРазделить(АутентификацияСтрока, ":");
Аутентификация.Пользователь = АутентификацияЧасти[0];
Если АутентификацияЧасти.Количество() > 1 Тогда
Аутентификация.Пароль = АутентификацияЧасти[1];
КонецЕсли;
КонецЕсли;
// IPv6
@@ -98,8 +101,11 @@
РазбитьСтрокуПоРазделителю(Запрос, Путь, "?", Истина);
Для Каждого СтрокаКлючРавноПараметр Из СтрРазделить(Запрос, "&", Ложь) Цикл
СтрокаКлючРавноПараметр = РаскодироватьСтроку(
СтрокаКлючРавноПараметр, СпособКодированияСтроки.URLВКодировкеURL);
СтрокаКлючРавноПараметр,
СпособКодированияСтроки.URLВКодировкеURL
);
ПозицияРавно = СтрНайти(СтрокаКлючРавноПараметр, "=");
Если ПозицияРавно = 0 Тогда
@@ -111,6 +117,7 @@
КонецЕсли;
Если ПараметрыЗапроса.Получить(Ключ) <> Неопределено Тогда
Если ТипЗнч(ПараметрыЗапроса[Ключ]) = Тип("Массив") Тогда
ПараметрыЗапроса[Ключ].Добавить(Значение);
Иначе
@@ -119,8 +126,11 @@
Значения.Добавить(Значение);
ПараметрыЗапроса[Ключ] = Значения;
КонецЕсли;
Иначе
ПараметрыЗапроса.Вставить(Ключ, Значение);
КонецЕсли;
КонецЦикла;
@@ -131,13 +141,16 @@
Индекс = СтрНайти(ОстальнаяЧасть, Разделитель);
Если Индекс Тогда
ИзвлекаемаяЧасть = Лев(ОстальнаяЧасть, Индекс - 1);
ОстальнаяЧасть = Сред(ОстальнаяЧасть, Индекс + СтрДлина(Разделитель));
Если Инверсия Тогда
ДляОбмена = ИзвлекаемаяЧасть;
ИзвлекаемаяЧасть = ОстальнаяЧасть;
ОстальнаяЧасть = ДляОбмена;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
@@ -148,14 +161,18 @@
ПервыйРазделитель = "";
Для Каждого Разделитель Из Разделители Цикл
Индекс = СтрНайти(Строка, Разделитель);
Если Индекс = 0 Тогда
Продолжить;
КонецЕсли;
Если Индекс < МинимальныйИндекс Тогда
МинимальныйИндекс = Индекс;
ПервыйРазделитель = Разделитель;
КонецЕсли;
КонецЦикла;
Результат = Новый Массив;
@@ -173,13 +173,16 @@
КонецЕсли;
Если ЭтоНовоеЗначение Тогда
СтруктураЗначения = Новый Структура();
СтруктураЗначения.Вставить("Значение", СокрЛП(ЗначениеПараметра));
СтруктураЗначения.Вставить("Параметры", Новый Соответствие());
СтруктураЗначения.Параметры.Вставить("headers", Новый Соответствие());
Результат.Значения.Добавить(СтруктураЗначения);
Результат.Значения.Добавить(СтруктураЗначения);
Иначе
ПараметрыЗначения = Результат.Значения[Результат.Значения.ВГраница()].Параметры;
Если ИмяПараметра = "headers" Тогда
@@ -187,6 +190,7 @@
Иначе
ПараметрыЗначения.Вставить(ИмяПараметра, СокрЛП(ЗначениеПараметра));
КонецЕсли;
КонецЕсли;
ИмяПараметра = "";
@@ -74,9 +74,12 @@
КонецФункции
Функция ТокенРегулярноеВыражение(Паттерн, ТипТокена)
РегулярноеВыражение = Новый РегулярноеВыражение(Паттерн);
РегулярноеВыражение.Многострочный = Ложь;
Возврат Новый СпецификацияТокенРегулярноеВыражение(РегулярноеВыражение, ТипТокена);
КонецФункции
Процедура ОбработатьТокен(Токен, ТекущееСостояние)
@@ -157,9 +160,11 @@
ИмяОбъекта = Сред(Значение, 1, ПозицияПробела - 1);
ОстальнаяЧасть = Сред(Значение, ПозицияПробела);
Значение = СтрШаблон("%1%2",
Значение = СтрШаблон(
"%1%2",
ПолучитьПеревод("Переменная." + ИмяОбъекта, ИмяОбъекта),
ОстальнаяЧасть);
ОстальнаяЧасть
);
ТекущееСостояние.ИмяОбъектаПрисваивания = ИмяОбъекта;
@@ -172,9 +177,11 @@
ОператорНовый = СокрЛП(Подстроки[0]);
Тип = СокрЛП(Подстроки[1]);
Значение = СтрШаблон("%1 %2",
Значение = СтрШаблон(
"%1 %2",
ПолучитьПеревод(ОператорНовый, ОператорНовый),
ПолучитьПеревод(Тип, Тип));
ПолучитьПеревод(Тип, Тип)
);
Если Не ПустаяСтрока(ТекущееСостояние.ИмяОбъектаПрисваивания) Тогда
ТекущееСостояние.ТипыОбъектов.Вставить(ТекущееСостояние.ИмяОбъектаПрисваивания, Тип);
@@ -189,12 +196,14 @@
ПутьСТочкой = "";
Если Подстроки.Количество() > 2 Тогда
Путь = Новый Массив();
Для к = 1 По Подстроки.ВГраница() - 1 Цикл
Путь.Добавить(СокрЛП(Подстроки[к]));
КонецЦикла;
ПутьСТочкой = "." + СтрСоединить(Путь, ".");
КонецЕсли;
ИмяОбъекта = СокрЛП(Подстроки[0]);
@@ -203,17 +212,20 @@
ТипКонечногоОбъекта = ТекущееСостояние.ТипыОбъектов[ИмяОбъекта + ПутьСТочкой];
Если Не ТипКонечногоОбъекта = Неопределено Тогда
Значение = СтрШаблон("%1%2.%3(",
Значение = СтрШаблон(
"%1%2.%3(",
ПолучитьПеревод("Переменная." + ИмяОбъекта, ИмяОбъекта),
ПутьСТочкой,
ПолучитьПеревод(ТипКонечногоОбъекта + "." + ИмяМетода, ИмяМетода));
ПолучитьПеревод(ТипКонечногоОбъекта + "." + ИмяМетода, ИмяМетода)
);
Иначе
Значение = СтрШаблон("%1%2.%3(",
ПолучитьПеревод("Переменная." + ИмяОбъекта, ИмяОбъекта),
ПутьСТочкой,
ИмяМетода);
ИмяМетода
);
КонецЕсли;
@@ -237,23 +249,29 @@
// Свойство объекта
Если ПереводПеречисления = Неопределено Тогда
ТипОбъекта = ТекущееСостояние.ТипыОбъектов[ИмяОбъекта];
Если Не ТипОбъекта = Неопределено Тогда
Значение = СтрШаблон("%1.%2",
Значение = СтрШаблон(
"%1.%2",
ПолучитьПеревод("Переменная." + ИмяОбъекта, ИмяОбъекта),
ПолучитьПеревод(ТипОбъекта + "." + ИмяСвойства, ИмяСвойства));
ПолучитьПеревод(ТипОбъекта + "." + ИмяСвойства, ИмяСвойства)
);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьПеревод(ИмяРесурса, ЗначениеПоУмолчанию)
Ресурс = _ПакетРесурсов.ПолучитьРесурс(ИмяРесурса);
Если ЗначениеЗаполнено(Ресурс) Тогда
Возврат Ресурс;
Иначе
Возврат ЗначениеПоУмолчанию;
КонецЕсли;
КонецФункции
#КонецОбласти
@@ -23,14 +23,14 @@
Процедура ОбновтитьСтатичныеФайлы() Экспорт
Если ТипЗнч(КаталогиСФайлами) = Тип("Соответствие") Тогда
Для Каждого КиЗ из КаталогиСФайлами Цикл
Для Каждого КиЗ Из КаталогиСФайлами Цикл
ДобавитьКаталогСтатичныхФайлов(КиЗ.Значение, КиЗ.Ключ);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьКаталогСтатичныхФайлов(КаталогФайлов, ПутьНаСайте = "/") Экспорт
Для Каждого ТипФайла из Перечисления.ОписанияТиповРасширенийФайлов Цикл
Для Каждого ТипФайла Из Перечисления.ОписанияТиповРасширенийФайлов Цикл
Файлы = НайтиФайлы(КаталогФайлов, "*." + ТипФайла.Ключ, Истина);
Для каждого Файл Из Файлы Цикл
ДобавитьМаршрутДоФайла(Файл, КаталогФайлов, ПутьНаСайте, ТипФайла.Значение);
@@ -56,7 +56,7 @@
КонецПроцедуры
Процедура ДобавитьМаршрутДоФайла(Файл, знач КаталогФайлов, знач ПутьНаСайте, знач ТипКонтента)
Процедура ДобавитьМаршрутДоФайла(Файл, Знач КаталогФайлов, Знач ПутьНаСайте, Знач ТипКонтента)
Если Не СтрЗаканчиваетсяНа(КаталогФайлов, "/") Тогда
КаталогФайлов = КаталогФайлов + "/";
@@ -89,7 +89,7 @@
КонецПроцедуры
Функция ПутьВПодкаталоге(знач ПолныйПуть, знач КаталогФайлов)
Функция ПутьВПодкаталоге(Знач ПолныйПуть, Знач КаталогФайлов)
Если СтрНачинаетсяС(КаталогФайлов, ".") Тогда
КаталогФайлов = Сред(КаталогФайлов, 2);
@@ -34,7 +34,8 @@
Конструктор.ДобавитьСтроку(Шаблон,
ИмяПеременной,
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла));
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)
);
ПрочитанныйФайл = Новый Структура();
ПрочитанныйФайл.Вставить("ПередаваемыйФайл", ПередаваемыйФайл);
@@ -43,13 +44,14 @@
ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
НомерФайла = НомерФайла + 1;
КонецЦикла;
Возврат Конструктор.ПолучитьРезультат();
КонецФункции
Функция СборкаДанныхЗапросаВСтроку(НазначениеДанных, ТекстовыеДанные, ПрочитанныеФайлы) Экспорт
Функция ДанныеЗапроса(НазначениеДанных, ТекстовыеДанные, ПрочитанныеФайлы) Экспорт
Конструктор = Новый КонструкторПрограммногоКода();
ЧастиКода = Новый Массив();
@@ -131,28 +133,41 @@
КонецФункции
Функция СборкаURL(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
Функция URL(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
// Схема
URL = """" + СтруктураURL.Схема + "://";
// Аутентификация
Пользователь = СтруктураURL.Аутентификация.Пользователь;
Пароль = СтруктураURL.Аутентификация.Пароль;
Аутентификация = "";
Если Не ПустаяСтрока(Пользователь) Или Не ПустаяСтрока(Пароль) Тогда
Аутентификация = СтрШаблон("%1:%2@", Пользователь, Пароль);
URL = URL + СтрШаблон("%1:%2@", Пользователь, Пароль);
КонецЕсли;
СборкаАдресаРесурса = СборкаАдресаРесурса(СтруктураURL, ТекстовыеДанные, ПрочитанныеФайлы);
// Сервер
URL = URL + СтруктураURL.Сервер;
Возврат """"
+ СтруктураURL.Схема + "://"
+ Аутентификация
+ СтруктураURL.Сервер
+ ?(ЗначениеЗаполнено(СтруктураURL.Порт), ":" + Формат(СтруктураURL.Порт, "ЧГ="), "")
+ ?(ПустаяСтрока(СборкаАдресаРесурса), """", Сред(СборкаАдресаРесурса, 2));
// Порт
Если ЗначениеЗаполнено(СтруктураURL.Порт) Тогда
URL = URL + ":" + Формат(СтруктураURL.Порт, "ЧГ=");
КонецЕсли;
// Адрес ресурса
АдресРесурса = АдресРесурса(СтруктураURL, ТекстовыеДанные, ПрочитанныеФайлы);
Если ПустаяСтрока(АдресРесурса) Тогда
URL = URL + """";
Иначе
URL = URL + Сред(АдресРесурса, 2);
КонецЕсли;
Возврат URL;
КонецФункции
Функция СборкаАдресаРесурса(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
Функция АдресРесурса(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
Конструктор = Новый КонструкторПрограммногоКода();
@@ -166,21 +181,26 @@
// Исходные параметры запроса
Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл
КлючИЗначение = СтрШаблон("%1=%2",
КодироватьСтроку(Параметр.Ключ, СпособКодированияСтроки.КодировкаURL),
КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL));
ПараметрыЗапроса.Добавить(КлючИЗначение);
КонецЦикла;
// Дополняемые параметры запроса
Если Не ТекстовыеДанные = Неопределено Тогда
Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл
Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
Если ПараметрыЗапроса.Количество() И Не ПустаяСтрока(ПередаваемыйТекст.РазделительТелаЗапроса) Тогда
ПараметрыЗапроса.Добавить(ПередаваемыйТекст.РазделительТелаЗапроса);
КонецЕсли;
ПараметрыЗапроса.Добавить(ПередаваемыйТекст.ПолноеЗначение());
КонецЕсли;
КонецЦикла;
КонецЕсли;
@@ -193,6 +213,7 @@
ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
Префикс = ПередаваемыйФайл.ИмяПоля + "=";
ПрефиксВКоде = Конструктор.ПараметрВСтроку(Префикс) + " + ";
@@ -210,6 +231,7 @@
+ СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителем, РазделительПараметров + Префикс)
+ ИмяПеременной;
КонецЕсли;
КонецЕсли;
КонецЦикла;
@@ -277,7 +299,7 @@
КонецФункции
Функция СозданиеИнтернетПрокси(ОписаниеЗапроса, ИмяПараметра) Экспорт
Функция ИнтернетПрокси(ОписаниеЗапроса, ИмяПараметра) Экспорт
Конструктор = Новый КонструкторПрограммногоКода();
@@ -295,7 +317,8 @@
.ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметра)
.ДобавитьСтроку("%1.Установить(%2);",
ИмяПараметра,
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции));
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
);
Возврат Конструктор.ПолучитьРезультат();
@@ -1,3 +1,5 @@
// BSLLS:ExportVariables-off
Перем ТелоЗапроса Экспорт;
Перем СтрокаЗапроса Экспорт;
@@ -1,3 +1,5 @@
// BSLLS:ExportVariables-off
Перем HTTP Экспорт;
Перем HTTPS Экспорт;
Перем FTP Экспорт;
@@ -1,3 +1,5 @@
// BSLLS:ExportVariables-off
Перем Basic Экспорт;
Перем Digest Экспорт;
Перем NTLM Экспорт;
@@ -1,3 +1,5 @@
// BSLLS:LatinAndCyrillicSymbolInWord-off
#Использовать asserts
#Использовать "../src/core"
@@ -743,7 +745,6 @@
КонецПроцедуры
&Тест
Процедура ТестДолжен_ПроверитьИспользованиеСертификатаКлиентаИСертификатыУЦИзФайла() Экспорт
@@ -1308,7 +1309,7 @@
КонецПроцедуры
&Тест
Процедура ТестДолжен_ПроверитьОтсутстивиеЗамещенияUserAgent() Экспорт
Процедура ТестДолжен_ПроверитьОтсутствиеЗамещенияUserAgent() Экспорт
КонсольнаяКоманда = "curl http://example.com/ -H 'User-Agent: Agent 007' -A 'Agent 001'";
@@ -1,3 +1,5 @@
// BSLLS:LatinAndCyrillicSymbolInWord-off
#Использовать asserts
#Использовать "../src/core"
@@ -996,7 +998,7 @@
КонецПроцедуры
&Тест
Процедура ТестДолжен_ПроверитьОтсутстивиеЗамещенияUserAgent() Экспорт
Процедура ТестДолжен_ПроверитьОтсутствиеЗамещенияUserAgent() Экспорт
КонсольнаяКоманда = "curl http://example.com/ -H 'User-Agent: Agent 007' -A 'Agent 001'";
@@ -1,3 +1,5 @@
// BSLLS:LatinAndCyrillicSymbolInWord-off
#Использовать asserts
#Использовать "../src/core"
@@ -17,7 +19,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -33,7 +35,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -49,7 +51,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -70,7 +72,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
Ожидаем.Что(Ошибки).Заполнено();
@@ -86,7 +88,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -102,7 +104,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -118,7 +120,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -142,7 +144,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -168,7 +170,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки, "Команда не валидна: " + КонсольнаяКоманда).Заполнено();
@@ -181,7 +183,6 @@
ВалидныеКоманды.Добавить("-T file --get");
ВалидныеКоманды.Добавить("--get --head");
ВалидныеКоманды.Добавить("-d 'key=val' --get");
ВалидныеКоманды.Добавить("--get --head");
ВалидныеКоманды.Добавить("-d 'key=val' --get --head");
Для Каждого Команда Из ВалидныеКоманды Цикл
@@ -189,7 +190,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Ошибки, "Команда валидна: " + КонсольнаяКоманда).Не_().Заполнено();
КонецЦикла;
@@ -203,7 +204,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки).Заполнено();
@@ -232,7 +233,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки, "Команда не валидна: " + КонсольнаяКоманда).Заполнено();
@@ -242,7 +243,6 @@
КонецПроцедуры
&Тест
Процедура ТестДолжен_ПроверитьОшибкуЗапрещеноИспользоватьНесколькоТиповАутентификации() Экспорт
@@ -256,7 +256,7 @@
Ошибки = Неопределено;
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда,, Ошибки);
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, , Ошибки);
Ожидаем.Что(Результат).Не_().Заполнено();
Ожидаем.Что(Ошибки, "Команда не валидна: " + КонсольнаяКоманда).Заполнено();
@@ -1,3 +1,5 @@
// BSLLS:LatinAndCyrillicSymbolInWord-off
#Использовать asserts
#Использовать coloratos
#Использовать "../src/cli"