mirror of
https://github.com/alei1180/curlone.git
synced 2026-06-21 01:30:38 +02:00
feat: Поддержка переменных bash/shel
This commit is contained in:
+10
-5
@@ -1,6 +1,11 @@
|
||||
# OneScript
|
||||
out/
|
||||
oscript_modules/
|
||||
coverage/
|
||||
*.ospx
|
||||
|
||||
# VS Code
|
||||
.vscode/
|
||||
|
||||
# Mac
|
||||
**/.DS_Store
|
||||
.vscode/*
|
||||
coverage/*
|
||||
out/*
|
||||
oscript_modules/*
|
||||
*.ospx
|
||||
+6
-6
@@ -15,12 +15,12 @@
|
||||
.ВключитьФайл("README.md")
|
||||
.ВключитьФайл("LICENSE")
|
||||
.ВключитьФайл("NOTICES")
|
||||
.ЗависитОт("tokenizer")
|
||||
.ЗависитОт("logos")
|
||||
.ЗависитОт("winow", "0.8.5")
|
||||
.ЗависитОт("autumn-cli", "1.0.6")
|
||||
.ЗависитОт("coloratos")
|
||||
.ЗависитОт("i18n")
|
||||
.ЗависитОт("tokenizer", "1.0.2")
|
||||
.ЗависитОт("logos", "1.7.1")
|
||||
.ЗависитОт("winow", "0.9.5")
|
||||
.ЗависитОт("autumn-cli", "1.2.0")
|
||||
.ЗависитОт("coloratos", "0.3.0")
|
||||
.ЗависитОт("i18n", "1.0.0")
|
||||
.РазработкаЗависитОт("1bdd")
|
||||
.РазработкаЗависитОт("1testrunner")
|
||||
.РазработкаЗависитОт("asserts")
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
ОписаниеЗапроса = Описание;
|
||||
ИсходящиеОшибки = Ошибки;
|
||||
Конструктор = Новый КонструкторПрограммногоКода();
|
||||
Конструктор = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
ПрочитанныеФайлы.Очистить();
|
||||
|
||||
ПакетРесурсов = МенеджерРесурсовЛокализации.ПолучитьПакеты(
|
||||
@@ -59,6 +59,7 @@
|
||||
);
|
||||
|
||||
ОпределитьМетодУстановкиТелаЗапроса();
|
||||
ДобавитьПеременные();
|
||||
ДобавитьЧтениеФайлов();
|
||||
ДобавитьДанныеЗапроса();
|
||||
ДобавитьРазделительДанныхMultipart();
|
||||
@@ -197,6 +198,18 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьПеременные()
|
||||
|
||||
Код = Новый ГенераторКодаИменаПеременных(ОписаниеЗапроса).Получить();
|
||||
|
||||
Если Не ПустаяСтрока(Код) Тогда
|
||||
Конструктор
|
||||
.ДобавитьПустуюСтроку()
|
||||
.ДобавитьСтроку(Код);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьРазделительДанныхMultipart()
|
||||
|
||||
Если Не ОписаниеЗапроса.ОтправлятьКакMultipartFormData Тогда
|
||||
@@ -216,7 +229,7 @@
|
||||
|
||||
ИнициализированыЗаголовки = Ложь;
|
||||
|
||||
ЛокальныйКонструктор = Новый КонструкторПрограммногоКода();
|
||||
ЛокальныйКонструктор = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл
|
||||
|
||||
@@ -298,7 +311,7 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Код = ЛокальныйГенераторКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
|
||||
Код = Новый ГенераторКодаЧтениеТекстовыхФайлов(ОписаниеЗапроса, ФайлыДляЧтения, ПрочитанныеФайлы).Получить();
|
||||
|
||||
Если Не ПустаяСтрока(Код) Тогда
|
||||
Конструктор
|
||||
@@ -315,11 +328,11 @@
|
||||
КонецЕсли;
|
||||
|
||||
ТелоЗапросаСтрока = "";
|
||||
ТелоЗапроса = ЛокальныйГенераторКода.ДанныеЗапроса(
|
||||
НазначенияПередаваемыхДанных.ТелоЗапроса,
|
||||
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
|
||||
ТелоЗапроса = Новый ГенераторКодаДанныеЗапроса(
|
||||
ОписаниеЗапроса,
|
||||
НазначенияПередаваемыхДанных.ТелоЗапроса,
|
||||
ПрочитанныеФайлы
|
||||
);
|
||||
).Получить();
|
||||
|
||||
Если ЗначениеЗаполнено(ТелоЗапроса) Тогда
|
||||
|
||||
@@ -424,7 +437,7 @@
|
||||
|
||||
Конструктор
|
||||
.ДобавитьПустуюСтроку()
|
||||
.ДобавитьСтроку(ЛокальныйГенераторКода.ИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
|
||||
.ДобавитьСтроку(Новый ГенераторКодаИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси).Получить());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -562,11 +575,12 @@
|
||||
|
||||
ПараметрыФункции = Новый Массив;
|
||||
|
||||
АдресРесурсаКод = ЛокальныйГенераторКода.АдресРесурса(
|
||||
АдресРесурсаКод = Новый ГенераторКодаАдресРесурса(
|
||||
ОписаниеЗапроса,
|
||||
СтруктураURL,
|
||||
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
|
||||
ПрочитанныеФайлы
|
||||
);
|
||||
).Получить();
|
||||
|
||||
Если ПустаяСтрока(АдресРесурсаКод) Тогда
|
||||
|
||||
@@ -705,7 +719,7 @@
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
КонструкторЗаписиДанных = Новый КонструкторПрограммногоКода();
|
||||
КонструкторЗаписиДанных = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
ДобавитьДанныеФормыВЗаписьДанныхMultipart(КонструкторЗаписиДанных);
|
||||
ДобавитьДанныеФормыИзФайловВЗаписьДанныхMultipart(КонструкторЗаписиДанных);
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
ОписаниеЗапроса = Описание;
|
||||
ИсходящиеОшибки = Ошибки;
|
||||
Конструктор = Новый КонструкторПрограммногоКода();
|
||||
Конструктор = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
Состояние = НовоеСостояние();
|
||||
ПрочитанныеФайлы.Очистить();
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
КодЛокализации
|
||||
);
|
||||
|
||||
ДобавитьПеременные();
|
||||
ДобавитьЧтениеФайлов();
|
||||
ДобавитьДанныеЗапроса();
|
||||
ДобавитьФайлы();
|
||||
@@ -186,6 +187,18 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьПеременные()
|
||||
|
||||
Код = Новый ГенераторКодаИменаПеременных(ОписаниеЗапроса).Получить();
|
||||
|
||||
Если Не ПустаяСтрока(Код) Тогда
|
||||
Конструктор
|
||||
.ДобавитьПустуюСтроку()
|
||||
.ДобавитьСтроку(Код);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьЗаголовки()
|
||||
|
||||
Заголовки = ПередаваемыеЗаголовки();
|
||||
@@ -234,7 +247,7 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Код = ЛокальныйГенераторКода.ЧтениеТекстовыхФайлов(ФайлыДляЧтения, ПрочитанныеФайлы);
|
||||
Код = Новый ГенераторКодаЧтениеТекстовыхФайлов(ОписаниеЗапроса, ФайлыДляЧтения, ПрочитанныеФайлы).Получить();
|
||||
|
||||
Если Не ПустаяСтрока(Код) Тогда
|
||||
Конструктор
|
||||
@@ -287,7 +300,7 @@
|
||||
|
||||
Процедура ДобавитьДанныеЗапросаЧерезСоответствие(Назначение, ИмяПараметра, РезультатСборка = "")
|
||||
|
||||
КонструкторДанных = Новый КонструкторПрограммногоКода();
|
||||
КонструкторДанных = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
ДобавитьДанныеЗапросаИзТекстовыхДанныхЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра);
|
||||
ДобавитьДанныеЗапросаИзПрочитанныхФайловЧерезСоответствие(КонструкторДанных, Назначение, ИмяПараметра);
|
||||
@@ -415,11 +428,11 @@
|
||||
|
||||
Процедура ДобавитьТекстовыеДанныеЗапросаЧерезСтроку(НазначениеДанных, ИмяПараметра, РезультатСборка)
|
||||
|
||||
Сборка = ЛокальныйГенераторКода.ДанныеЗапроса(
|
||||
НазначениеДанных,
|
||||
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
|
||||
Сборка = Новый ГенераторКодаДанныеЗапроса(
|
||||
ОписаниеЗапроса,
|
||||
НазначениеДанных,
|
||||
ПрочитанныеФайлы
|
||||
);
|
||||
).Получить();
|
||||
|
||||
Если Не ЗначениеЗаполнено(Сборка) Тогда
|
||||
Возврат;
|
||||
@@ -471,7 +484,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
Назначение = НазначенияПередаваемыхДанных.ТелоЗапроса;
|
||||
КонструкторФайлов = Новый КонструкторПрограммногоКода();
|
||||
КонструкторФайлов = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
Для Каждого ПередаваемыйФайл Из ОписаниеЗапроса.Файлы Цикл
|
||||
|
||||
@@ -713,7 +726,7 @@
|
||||
|
||||
Конструктор
|
||||
.ДобавитьПустуюСтроку()
|
||||
.ДобавитьСтроку(ЛокальныйГенераторКода.ИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси));
|
||||
.ДобавитьСтроку(Новый ГенераторКодаИнтернетПрокси(ОписаниеЗапроса, ИмяПараметраПрокси).Получить());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -827,15 +840,16 @@
|
||||
Если Состояние.ПереданаСтрокаЗапроса
|
||||
И ВозможнаПередачаДанныхЧерезСоответствие(НазначениеДанных) Тогда
|
||||
|
||||
URLСборка = ЛокальныйГенераторКода.URL(СтруктураURL);
|
||||
URLСборка = Новый ГенераторКодаURL(ОписаниеЗапроса, СтруктураURL).Получить();
|
||||
|
||||
Иначе
|
||||
|
||||
URLСборка = ЛокальныйГенераторКода.URL(
|
||||
URLСборка = Новый ГенераторКодаURL(
|
||||
ОписаниеЗапроса,
|
||||
СтруктураURL,
|
||||
ОписаниеЗапроса.ОтправляемыеТекстовыеДанные,
|
||||
ПрочитанныеФайлы
|
||||
);
|
||||
).Получить();
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
@@ -855,7 +869,7 @@
|
||||
|
||||
Состояние.ЕстьДополнительныеПараметры = Ложь;
|
||||
|
||||
КонструкторДопПараметров = Новый КонструкторПрограммногоКода();
|
||||
КонструкторДопПараметров = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
ДобавитьЗаголовкиВДополнительныеПараметры(КонструкторДопПараметров);
|
||||
ДобавитьАутентификациюВДополнительныеПараметры(КонструкторДопПараметров);
|
||||
|
||||
@@ -48,10 +48,13 @@
|
||||
|
||||
Если ТипЗнч(КоманднаяСтрока) = Тип("Массив") Тогда
|
||||
АргументыКоманд = Новый Массив();
|
||||
ИменаПеременных = Новый Массив();
|
||||
АргументыКоманд.Добавить(КоманднаяСтрока);
|
||||
Иначе
|
||||
Парсер = Новый ПарсерКонсольнойКоманды();
|
||||
АргументыКоманд = Парсер.Распарсить(КоманднаяСтрока);
|
||||
РезультатПарсинга = Парсер.Распарсить(КоманднаяСтрока);
|
||||
АргументыКоманд = РезультатПарсинга.АргументыКоманд;
|
||||
ИменаПеременных = РезультатПарсинга.ИменаПеременных;
|
||||
КонецЕсли;
|
||||
|
||||
Если АргументыКоманд.Количество() = 0 Тогда
|
||||
@@ -66,6 +69,7 @@
|
||||
|
||||
НомерКоманды = НомерКоманды + 1;
|
||||
ОписаниеЗапроса = Новый ОписаниеЗапроса();
|
||||
ОписаниеЗапроса.ИменаПеременных = ИменаПеременных;
|
||||
|
||||
ОбработатьАргументыКоманды(АргументыКоманды, НомерКоманды, КоличествоКоманд);
|
||||
|
||||
@@ -1794,7 +1798,7 @@
|
||||
КонецФункции
|
||||
|
||||
// Используется для отключения вывода справки cli
|
||||
Процедура Заглушка(Значение = Неопределено) Экспорт
|
||||
Процедура Заглушка(Значение = Неопределено) Экспорт // BSLLS:MissingParameterDescription-off
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
Перем _СтруктураURL; // ПарсерURL
|
||||
Перем _ТекстовыеДанные; // Массив из ПередаваемыйТекст
|
||||
Перем _ПрочитанныеФайлы; // Массив из Структура:
|
||||
// - ПередаваемыйФайл - см. ПередаваемыйФайл
|
||||
// - ИмяПеременной - Строка
|
||||
Перем _Конструктор; // КонструкторПрограммногоКода
|
||||
|
||||
Процедура ПриСозданииОбъекта(
|
||||
ОписаниеЗапроса,
|
||||
СтруктураURL,
|
||||
ТекстовыеДанные = Неопределено,
|
||||
ПрочитанныеФайлы = Неопределено
|
||||
)
|
||||
|
||||
_ОписаниеЗапроса = ОписаниеЗапроса;
|
||||
_СтруктураURL = СтруктураURL;
|
||||
_ТекстовыеДанные = ТекстовыеДанные;
|
||||
_ПрочитанныеФайлы = ПрочитанныеФайлы;
|
||||
_Конструктор = Новый КонструкторПрограммногоКода(ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Получить() Экспорт
|
||||
|
||||
// Схема
|
||||
URL = СтрШаблон("%1://", _СтруктураURL.Схема);
|
||||
|
||||
// Аутентификация
|
||||
Пользователь = _СтруктураURL.Аутентификация.Пользователь;
|
||||
Пароль = _СтруктураURL.Аутентификация.Пароль;
|
||||
|
||||
Если Не ПустаяСтрока(Пользователь) Или Не ПустаяСтрока(Пароль) Тогда
|
||||
URL = URL + СтрШаблон("%1:%2@", Пользователь, Пароль);
|
||||
КонецЕсли;
|
||||
|
||||
// Сервер
|
||||
URL = URL + _СтруктураURL.Сервер;
|
||||
|
||||
// Порт
|
||||
Если ЗначениеЗаполнено(_СтруктураURL.Порт) Тогда
|
||||
URL = URL + ":" + Формат(_СтруктураURL.Порт, "ЧГ=");
|
||||
КонецЕсли;
|
||||
|
||||
URL = _Конструктор.ПараметрВСтроку(URL);
|
||||
|
||||
// Адрес ресурса
|
||||
АдресРесурса = Новый ГенераторКодаАдресРесурса(
|
||||
_ОписаниеЗапроса,
|
||||
_СтруктураURL,
|
||||
_ТекстовыеДанные,
|
||||
_ПрочитанныеФайлы
|
||||
).Получить();
|
||||
|
||||
Если ПустаяСтрока(АдресРесурса) Тогда
|
||||
Возврат URL;
|
||||
КонецЕсли;
|
||||
|
||||
Кавычка = """";
|
||||
Если СтрЗаканчиваетсяНа(URL, Кавычка) И СтрНачинаетсяС(АдресРесурса, Кавычка) Тогда
|
||||
URL = Сред(URL, 1, СтрДлина(URL) - 1) + Сред(АдресРесурса, 2);
|
||||
Иначе
|
||||
URL = СтрШаблон("%1 + %2", URL, АдресРесурса);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат URL;
|
||||
|
||||
КонецФункции
|
||||
@@ -0,0 +1,212 @@
|
||||
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
Перем _СтруктураURL; // ПарсерURL
|
||||
Перем _ТекстовыеДанные; // Массив из ПередаваемыйТекст
|
||||
Перем _ПрочитанныеФайлы; // Массив из Структура:
|
||||
// - ПередаваемыйФайл - см. ПередаваемыйФайл
|
||||
// - ИмяПеременной - Строка
|
||||
Перем _Конструктор; // КонструкторПрограммногоКода
|
||||
Перем _РазделительПараметров; // Строка
|
||||
Перем _КонкатенацияСПереносомСтрокиИРазделителем; // Строка
|
||||
Перем _КонкатенацияСПереносомСтроки; // Строка
|
||||
|
||||
Процедура ПриСозданииОбъекта(
|
||||
ОписаниеЗапроса,
|
||||
СтруктураURL,
|
||||
ТекстовыеДанные = Неопределено,
|
||||
ПрочитанныеФайлы = Неопределено
|
||||
)
|
||||
|
||||
_ОписаниеЗапроса = ОписаниеЗапроса;
|
||||
_СтруктураURL = СтруктураURL;
|
||||
_ТекстовыеДанные = ТекстовыеДанные;
|
||||
_ПрочитанныеФайлы = ПрочитанныеФайлы;
|
||||
_Конструктор = Новый КонструкторПрограммногоКода(_ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
_РазделительПараметров = "&";
|
||||
_КонкатенацияСПереносомСтрокиИРазделителем = "
|
||||
| + ""%1"" + ";
|
||||
_КонкатенацияСПереносомСтроки = "
|
||||
| + ";
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция Получить() Экспорт
|
||||
|
||||
ПараметрыЗапросаСтрокой = ПараметрыЗапросаСтрокой();
|
||||
ПараметрыЗапросаИзФайловСтрокой = ПараметрыЗапросаИзФайловСтрокой();
|
||||
|
||||
ЕстьПараметрыЗапроса = Не ПустаяСтрока(ПараметрыЗапросаСтрокой) Или Не ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой);
|
||||
|
||||
Адрес = _СтруктураURL.Путь + ?(ЕстьПараметрыЗапроса, "?", "") + ПараметрыЗапросаСтрокой;
|
||||
Фрагмент = ?(Не ПустаяСтрока(_СтруктураURL.Фрагмент), "#" + _СтруктураURL.Фрагмент, "");
|
||||
|
||||
Если ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой) Тогда
|
||||
Возврат АдресРесурсаБезПараметровИзФайла(Адрес, Фрагмент);
|
||||
Иначе
|
||||
Возврат АдресРесурсаСПараметрамиИзФайла(Адрес, Фрагмент, ПараметрыЗапросаСтрокой, ПараметрыЗапросаИзФайловСтрокой);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция АдресРесурсаБезПараметровИзФайла(Адрес, Фрагмент)
|
||||
|
||||
Результат = Адрес + Фрагмент;
|
||||
|
||||
Если ЗначениеЗаполнено(Результат) Тогда
|
||||
Результат = _Конструктор.ПараметрВСтроку(Результат);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция АдресРесурсаСПараметрамиИзФайла(Адрес, Фрагмент, ПараметрыЗапросаСтрокой, ПараметрыЗапросаИзФайловСтрокой)
|
||||
|
||||
ВозможноОднойСтрокой = ПустаяСтрока(Фрагмент) И СтрЧислоСтрок(ПараметрыЗапросаИзФайловСтрокой) = 1;
|
||||
|
||||
Если ВозможноОднойСтрокой Тогда
|
||||
Возврат АдресРесурсаСПараметрамиИзФайлаОднострочный(Адрес, ПараметрыЗапросаСтрокой, ПараметрыЗапросаИзФайловСтрокой);
|
||||
Иначе
|
||||
Возврат АдресРесурсаСПараметрамиИзФайлаМногострочный(
|
||||
Адрес,
|
||||
Фрагмент,
|
||||
ПараметрыЗапросаСтрокой,
|
||||
ПараметрыЗапросаИзФайловСтрокой
|
||||
);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция АдресРесурсаСПараметрамиИзФайлаОднострочный(Адрес, ПараметрыЗапросаСтрокой, ПараметрыЗапросаИзФайловСтрокой)
|
||||
|
||||
Возврат ""
|
||||
+ _Конструктор.ПараметрВСтроку(Адрес + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), "", _РазделительПараметров))
|
||||
+ " + "
|
||||
+ ПараметрыЗапросаИзФайловСтрокой;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция АдресРесурсаСПараметрамиИзФайлаМногострочный(
|
||||
Адрес,
|
||||
Фрагмент,
|
||||
ПараметрыЗапросаСтрокой,
|
||||
ПараметрыЗапросаИзФайловСтрокой)
|
||||
|
||||
Результат = _Конструктор.ПараметрВСтроку(Адрес);
|
||||
|
||||
Если ПустаяСтрока(ПараметрыЗапросаСтрокой) Тогда
|
||||
Результат = Результат
|
||||
+ _КонкатенацияСПереносомСтроки
|
||||
+ ПараметрыЗапросаИзФайловСтрокой;
|
||||
ИначеЕсли Лев(ПараметрыЗапросаИзФайловСтрокой, 1) = """" Тогда
|
||||
Результат = Результат
|
||||
+ _КонкатенацияСПереносомСтроки
|
||||
+ """" + _РазделительПараметров
|
||||
+ Сред(ПараметрыЗапросаИзФайловСтрокой, 2);
|
||||
Иначе
|
||||
Результат = Результат
|
||||
+ СтрШаблон(_КонкатенацияСПереносомСтрокиИРазделителем, _РазделительПараметров)
|
||||
+ ПараметрыЗапросаИзФайловСтрокой;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПустаяСтрока(Фрагмент) Тогда
|
||||
Результат = Результат
|
||||
+ _КонкатенацияСПереносомСтроки
|
||||
+ _Конструктор.ПараметрВСтроку(Фрагмент);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПараметрыЗапросаСтрокой()
|
||||
|
||||
ПараметрыЗапроса = Новый Массив();
|
||||
|
||||
Для Каждого Параметр Из _СтруктураURL.ПараметрыЗапроса Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(Параметр.Значение) Тогда
|
||||
КлючИЗначение = СтрШаблон("%1=%2",
|
||||
КодироватьСтроку(Параметр.Ключ, СпособКодированияСтроки.КодировкаURL),
|
||||
КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL));
|
||||
Иначе
|
||||
КлючИЗначение = КодироватьСтроку(Параметр.Ключ, СпособКодированияСтроки.КодировкаURL);
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗапроса.Добавить(КлючИЗначение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ДополнитьПараметрыЗапроса(ПараметрыЗапроса);
|
||||
|
||||
Возврат СтрСоединить(ПараметрыЗапроса);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ДополнитьПараметрыЗапроса(ПараметрыЗапроса)
|
||||
|
||||
Если _ТекстовыеДанные = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ПередаваемыйТекст Из _ТекстовыеДанные Цикл
|
||||
Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
|
||||
|
||||
Если ПараметрыЗапроса.Количество() И Не ПустаяСтрока(ПередаваемыйТекст.РазделительТелаЗапроса) Тогда
|
||||
ПараметрыЗапроса.Добавить(ПередаваемыйТекст.РазделительТелаЗапроса);
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗапроса.Добавить(ПередаваемыйТекст.ПолноеЗначение());
|
||||
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПараметрыЗапросаИзФайловСтрокой()
|
||||
|
||||
ПараметрыЗапросаИзФайловСтрокой = "";
|
||||
Если _ПрочитанныеФайлы = Неопределено Тогда
|
||||
Возврат ПараметрыЗапросаИзФайловСтрокой;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ПрочитанныйФайл Из _ПрочитанныеФайлы Цикл
|
||||
|
||||
ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
|
||||
|
||||
Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
|
||||
|
||||
Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
|
||||
Префикс = ПередаваемыйФайл.ИмяПоля + "=";
|
||||
ПрефиксВКоде = _Конструктор.ПараметрВСтроку(Префикс) + " + ";
|
||||
Иначе
|
||||
Префикс = "";
|
||||
ПрефиксВКоде = "";
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПеременной = ПрочитанныйФайл.ИмяПеременной;
|
||||
|
||||
Если ПараметрыЗапросаИзФайловСтрокой = "" Тогда
|
||||
ПараметрыЗапросаИзФайловСтрокой = ПрефиксВКоде + ИмяПеременной;
|
||||
Иначе
|
||||
ПараметрыЗапросаИзФайловСтрокой = ПараметрыЗапросаИзФайловСтрокой
|
||||
+ СтрШаблон(_КонкатенацияСПереносомСтрокиИРазделителем, _РазделительПараметров + Префикс)
|
||||
+ ИмяПеременной;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ПараметрыЗапросаИзФайловСтрокой;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
@@ -0,0 +1,119 @@
|
||||
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
Перем _НазначениеДанных; // см. НазначенияПередаваемыхДанных
|
||||
Перем _ПрочитанныеФайлы; // Массив из Структура:
|
||||
// - ПередаваемыйФайл - см. ПередаваемыйФайл
|
||||
// - ИмяПеременной - Строка
|
||||
Перем _Конструктор; // КонструкторПрограммногоКода
|
||||
Перем _ЧастиКода; // Масств из Строка
|
||||
Перем _НуженРазделитель; // Булево
|
||||
|
||||
Процедура ПриСозданииОбъекта(ОписаниеЗапроса, НазначениеДанных, ПрочитанныеФайлы)
|
||||
|
||||
_ОписаниеЗапроса = ОписаниеЗапроса;
|
||||
_НазначениеДанных = НазначениеДанных;
|
||||
_ПрочитанныеФайлы = ПрочитанныеФайлы;
|
||||
_Конструктор = Новый КонструкторПрограммногоКода(_ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция Получить() Экспорт
|
||||
|
||||
_ЧастиКода = Новый Массив();
|
||||
_НуженРазделитель = Ложь;
|
||||
|
||||
ДобавитьТекстовыеДанные();
|
||||
ДобавитьФайлы();
|
||||
|
||||
Возврат СтрСоединить(_ЧастиКода);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ДобавитьТекстовыеДанные()
|
||||
|
||||
МассивТекстовыхДанных = Новый Массив();
|
||||
|
||||
Для Каждого ПередаваемыйТекст Из _ОписаниеЗапроса.ОтправляемыеТекстовыеДанные Цикл
|
||||
|
||||
Если Не ПередаваемыйТекст.Назначение = _НазначениеДанных Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Разделитель = ПередаваемыйТекст.РазделительТелаЗапроса;
|
||||
Если _НуженРазделитель И Не ПустаяСтрока(Разделитель) Тогда
|
||||
МассивТекстовыхДанных.Добавить(Разделитель);
|
||||
КонецЕсли;
|
||||
|
||||
МассивТекстовыхДанных.Добавить(ПередаваемыйТекст.ПолноеЗначение());
|
||||
|
||||
_НуженРазделитель = Истина;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если МассивТекстовыхДанных.Количество() Тогда
|
||||
_ЧастиКода.Добавить(_Конструктор.ПараметрВСтроку(СтрСоединить(МассивТекстовыхДанных)));
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьФайлы()
|
||||
|
||||
КонкатенацияСПереносомСтрокиИРазделителя = "
|
||||
| + ""%1"" + %2";
|
||||
КонкатенацияСПереносомСтроки = "
|
||||
| + %1";
|
||||
|
||||
Для Каждого ПрочитанныйФайл Из _ПрочитанныеФайлы Цикл
|
||||
|
||||
ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
|
||||
|
||||
Если Не ПередаваемыйФайл.Назначение = _НазначениеДанных Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
|
||||
Префикс = ПередаваемыйФайл.ИмяПоля + "=";
|
||||
ПрефиксВКоде = _Конструктор.ПараметрВСтроку(Префикс) + " + ";
|
||||
Иначе
|
||||
Префикс = "";
|
||||
ПрефиксВКоде = "";
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПеременной = ПрочитанныйФайл.ИмяПеременной;
|
||||
Разделитель = ПередаваемыйФайл.РазделительТелаЗапроса;
|
||||
Если _НуженРазделитель Тогда
|
||||
|
||||
Если Не ПустаяСтрока(Разделитель) Тогда
|
||||
|
||||
Текст = СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителя,
|
||||
ПередаваемыйФайл.РазделительТелаЗапроса + Префикс,
|
||||
ИмяПеременной);
|
||||
|
||||
_ЧастиКода.Добавить(Текст);
|
||||
|
||||
Иначе
|
||||
|
||||
Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрефиксВКоде + ИмяПеременной);
|
||||
_ЧастиКода.Добавить(Текст);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
_ЧастиКода.Добавить(ПрефиксВКоде + ИмяПеременной);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
_НуженРазделитель = Истина;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
@@ -0,0 +1,21 @@
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
|
||||
Процедура ПриСозданииОбъекта(ОписаниеЗапроса)
|
||||
_ОписаниеЗапроса = ОписаниеЗапроса;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Получить() Экспорт
|
||||
|
||||
Если _ОписаниеЗапроса.ИменаПеременных.Количество() = 0 Тогда
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
|
||||
Конструктор = Новый КонструкторПрограммногоКода();
|
||||
|
||||
Для Каждого Имя Из _ОписаниеЗапроса.ИменаПеременных Цикл
|
||||
Конструктор.ДобавитьСтроку("%1 = """";", Имя);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Конструктор.ПолучитьРезультат();
|
||||
|
||||
КонецФункции
|
||||
@@ -0,0 +1,32 @@
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
Перем _ИмяПараметра; // Строка
|
||||
|
||||
Процедура ПриСозданииОбъекта(ОписаниеЗапроса, ИмяПараметра)
|
||||
_ОписаниеЗапроса = ОписаниеЗапроса;
|
||||
_ИмяПараметра = ИмяПараметра;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Получить() Экспорт
|
||||
|
||||
Конструктор = Новый КонструкторПрограммногоКода(_ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
ИспользоватьАутентификациюОС = _ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификации.NTLM;
|
||||
|
||||
ПараметрыФункции = Новый Массив;
|
||||
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(_ОписаниеЗапроса.ПроксиПротокол));
|
||||
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(_ОписаниеЗапроса.ПроксиСервер));
|
||||
ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(_ОписаниеЗапроса.ПроксиПорт));
|
||||
ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(_ОписаниеЗапроса.ПроксиПользователь));
|
||||
ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(_ОписаниеЗапроса.ПроксиПароль));
|
||||
ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина
|
||||
|
||||
Конструктор
|
||||
.ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", _ИмяПараметра)
|
||||
.ДобавитьСтроку("%1.Установить(%2);",
|
||||
_ИмяПараметра,
|
||||
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
|
||||
);
|
||||
|
||||
Возврат Конструктор.ПолучитьРезультат();
|
||||
|
||||
КонецФункции
|
||||
@@ -0,0 +1,62 @@
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
Перем _Файлы; // Массив из ПередаваемыйФайл
|
||||
Перем _ПрочитанныеФайлы; // Массив из Структура:
|
||||
// - ПередаваемыйФайл - см. ПередаваемыйФайл
|
||||
// - ИмяПеременной - Строка
|
||||
|
||||
Процедура ПриСозданииОбъекта(ОписаниеЗапроса, Файлы, ПрочитанныеФайлы)
|
||||
_ОписаниеЗапроса = ОписаниеЗапроса;
|
||||
_Файлы = Файлы;
|
||||
_ПрочитанныеФайлы = ПрочитанныеФайлы;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Получить() Экспорт
|
||||
|
||||
Конструктор = Новый КонструкторПрограммногоКода(_ОписаниеЗапроса.ИменаПеременных);
|
||||
|
||||
НомерФайла = 1;
|
||||
Для Каждого ПередаваемыйФайл Из _Файлы Цикл
|
||||
|
||||
Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
|
||||
Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если НомерФайла > 1 Тогда
|
||||
Конструктор.ДобавитьПустуюСтроку();
|
||||
КонецЕсли;
|
||||
|
||||
Шаблон = "ЧтениеТекста = Новый ЧтениеТекста(%2);
|
||||
|%1 = ЧтениеТекста.Прочитать();";
|
||||
|
||||
Если ПередаваемыйФайл.УдалятьПереносыСтрок Тогда
|
||||
Шаблон = Шаблон + "
|
||||
|%1 = СтрЗаменить(%1, Символы.ПС, """");
|
||||
|%1 = СтрЗаменить(%1, Символы.ВК, """");";
|
||||
КонецЕсли;
|
||||
|
||||
Если ПередаваемыйФайл.КодироватьСодержимое Тогда
|
||||
Шаблон = Шаблон + "
|
||||
|%1 = КодироватьСтроку(%1, СпособКодированияСтроки.КодировкаURL);";
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПеременной = "{t(Переменная.ТекстовыеДанныеФайла)}_" + Формат(НомерФайла, "ЧГ=");
|
||||
|
||||
Конструктор.ДобавитьСтроку(Шаблон,
|
||||
ИмяПеременной,
|
||||
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)
|
||||
);
|
||||
|
||||
ПрочитанныйФайл = Новый Структура();
|
||||
ПрочитанныйФайл.Вставить("ПередаваемыйФайл", ПередаваемыйФайл);
|
||||
ПрочитанныйФайл.Вставить("ИмяПеременной", ИмяПеременной);
|
||||
|
||||
_ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
|
||||
|
||||
НомерФайла = НомерФайла + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Конструктор.ПолучитьРезультат();
|
||||
|
||||
КонецФункции
|
||||
@@ -1,25 +1,34 @@
|
||||
Перем Результат; // Массив из Строка
|
||||
Перем _Результат; // Массив из Строка
|
||||
Перем _ИменаПеременных; // Соответствие
|
||||
Перем _РегулярноеВыражениеПараметра; // РегулярноеПриложение
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция ПолучитьРезультат() Экспорт
|
||||
Возврат СокрЛП(СтрСоединить(Результат));
|
||||
Возврат СокрЛП(СтрСоединить(_Результат));
|
||||
КонецФункции
|
||||
|
||||
Функция Пустой() Экспорт
|
||||
Возврат Результат.Количество() = 0;
|
||||
Возврат _Результат.Количество() = 0;
|
||||
КонецФункции
|
||||
|
||||
Функция Очистить() Экспорт
|
||||
Результат.Очистить();
|
||||
_Результат.Очистить();
|
||||
Возврат ЭтотОбъект;
|
||||
КонецФункции
|
||||
|
||||
Функция ДобавитьСтроку(Строка,
|
||||
Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено) Экспорт
|
||||
|
||||
Результат.Добавить(Символы.ПС);
|
||||
Результат.Добавить(СтрШаблон(Строка, Значение1, Значение2, Значение3));
|
||||
ОбработаннаяСтрока = СтрШаблон(
|
||||
Строка,
|
||||
ОбработатьПараметрыВСтроке(Значение1),
|
||||
ОбработатьПараметрыВСтроке(Значение2),
|
||||
ОбработатьПараметрыВСтроке(Значение3)
|
||||
);
|
||||
|
||||
_Результат.Добавить(Символы.ПС);
|
||||
_Результат.Добавить(ОбработаннаяСтрока);
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
@@ -34,11 +43,11 @@
|
||||
|
||||
Функция ДобавитьПустуюСтроку(ТолькоПриОтсутствии = Истина) Экспорт
|
||||
|
||||
ИндексПоследнего = Результат.ВГраница();
|
||||
ИндексПоследнего = _Результат.ВГраница();
|
||||
|
||||
Если ИндексПоследнего >= 0 И Не Результат[ИндексПоследнего] = Символы.ПС
|
||||
Если ИндексПоследнего >= 0 И Не _Результат[ИндексПоследнего] = Символы.ПС
|
||||
Или Не ТолькоПриОтсутствии Тогда
|
||||
Результат.Добавить(Символы.ПС);
|
||||
_Результат.Добавить(Символы.ПС);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
@@ -48,10 +57,10 @@
|
||||
Функция ПараметрыФункцииВСтроку(ПараметрыФункции) Экспорт
|
||||
|
||||
ПараметрыСтрокой = "";
|
||||
МаксимальнаяДлинаВсехПараметровНаОднойСтроке = 110;
|
||||
МаксимальнаяДлинаВсехПараметровВОднойСтроке = 110;
|
||||
|
||||
ДлинаПараметров = СтрДлина(СтрСоединить(ПараметрыФункции, ", ")) ;
|
||||
ПереноситьКаждыйПараметр = ДлинаПараметров > МаксимальнаяДлинаВсехПараметровНаОднойСтроке;
|
||||
ПереноситьКаждыйПараметр = ДлинаПараметров > МаксимальнаяДлинаВсехПараметровВОднойСтроке;
|
||||
|
||||
Если ПереноситьКаждыйПараметр Тогда
|
||||
Разделитель = "," + Символы.ПС + Символы.Таб;
|
||||
@@ -89,7 +98,11 @@
|
||||
Тип = ТипЗнч(Значение);
|
||||
Если Тип = Тип("Строка") Тогда
|
||||
|
||||
Возврат СтрШаблон("""%1""", ЭкранироватьКавычки(Значение));
|
||||
Результат = ЭкранироватьКавычки(Значение);
|
||||
Результат = СтрШаблон("""%1""", Результат);
|
||||
Результат = ОбработатьПараметрыВСтроке(Результат);
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
ИначеЕсли Тип = Тип("Число") Тогда
|
||||
|
||||
@@ -231,8 +244,27 @@
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ПриСозданииОбъекта()
|
||||
Результат = Новый Массив();
|
||||
Процедура ПриСозданииОбъекта(ИменаПеременных = Неопределено)
|
||||
|
||||
_Результат = Новый Массив();
|
||||
_РегулярноеВыражениеПараметра = Новый РегулярноеВыражение("(?:\$|%24)ENV_([a-zA-Z_][a-zA-Z0-9_]*)");
|
||||
|
||||
ИнициализироватьИменаПеременных(ИменаПеременных);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ИнициализироватьИменаПеременных(ИменаПеременных)
|
||||
|
||||
_ИменаПеременных = Новый Соответствие();
|
||||
|
||||
Если ИменаПеременных = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Имя Из ИменаПеременных Цикл
|
||||
_ИменаПеременных[Имя] = Истина;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЭкранироватьКавычки(Знач Строка)
|
||||
@@ -241,4 +273,87 @@
|
||||
Возврат Строка;
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработатьПараметрыВСтроке(Строка)
|
||||
|
||||
Если _ИменаПеременных.Количество() = 0
|
||||
Или Не СтрНайти(Строка, "ENV_") Тогда
|
||||
Возврат Строка;
|
||||
КонецЕсли;
|
||||
|
||||
Результат = Новый Массив();
|
||||
|
||||
Кавычка = """";
|
||||
ЕстьКавычкаВНачале = СтрНачинаетсяС(Строка, Кавычка);
|
||||
ЕстьКавычкаВКонце = СтрЗаканчиваетсяНа(Строка, Кавычка);
|
||||
|
||||
Если ЕстьКавычкаВНачале И ЕстьКавычкаВКонце Тогда
|
||||
РабочаяСтрока = Сред(Строка, 2, СтрДлина(Строка) - 2);
|
||||
ИначеЕсли ЕстьКавычкаВНачале Тогда
|
||||
РабочаяСтрока = Сред(Строка, 2);
|
||||
ИначеЕсли ЕстьКавычкаВКонце Тогда
|
||||
РабочаяСтрока = Сред(Строка, 1, СтрДлина(Строка) - 1);
|
||||
Иначе
|
||||
РабочаяСтрока = Строка;
|
||||
КонецЕсли;
|
||||
|
||||
КоллекцияСовпадений = _РегулярноеВыражениеПараметра.НайтиСовпадения(РабочаяСтрока);
|
||||
Если КоллекцияСовпадений.Количество() = 0 Тогда
|
||||
Возврат Строка;
|
||||
КонецЕсли;
|
||||
|
||||
ДлинаСтроки = СтрДлина(РабочаяСтрока);
|
||||
ПредыдущийИндекс = 0;
|
||||
ПеременнаяВНачале = Ложь;
|
||||
ПеременнаяВКонце = Ложь;
|
||||
|
||||
Для Каждого Совпадение Из КоллекцияСовпадений Цикл
|
||||
|
||||
Имя = Совпадение.Группы[1].Значение;
|
||||
Если _ИменаПеременных[Имя] = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ВНачале = Совпадение.Индекс = 0;
|
||||
ВКонце = Совпадение.Индекс + Совпадение.Длина = ДлинаСтроки;
|
||||
СледомЗаПредыдущми = Совпадение.Индекс = ПредыдущийИндекс И Не ВНачале;
|
||||
ПеременнаяВНачале = ПеременнаяВНачале Или ВНачале;
|
||||
ПеременнаяВКонце = ПеременнаяВКонце Или ВКонце;
|
||||
|
||||
Если СледомЗаПредыдущми Тогда
|
||||
Результат.Удалить(Результат.ВГраница());
|
||||
КонецЕсли;
|
||||
|
||||
Если Не СледомЗаПредыдущми И Совпадение.Индекс > 0 Тогда
|
||||
ДобавочныйИндекс = ?(Совпадение.Индекс = 0, 0, 1);
|
||||
Результат.Добавить(Сред(РабочаяСтрока, ПредыдущийИндекс + ДобавочныйИндекс, Совпадение.Индекс - ПредыдущийИндекс));
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ВНачале Тогда
|
||||
Результат.Добавить(?(СледомЗаПредыдущми, "", """") + " + ");
|
||||
КонецЕсли;
|
||||
|
||||
Результат.Добавить(Имя);
|
||||
|
||||
Если Не ВКонце Тогда
|
||||
Результат.Добавить(" + """);
|
||||
КонецЕсли;
|
||||
|
||||
ПредыдущийИндекс = Совпадение.Индекс + Совпадение.Длина;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЕстьКавычкаВКонце И Не ПеременнаяВКонце Тогда
|
||||
Результат.Добавить(Кавычка);
|
||||
КонецЕсли;
|
||||
|
||||
Результат = СтрСоединить(Результат);
|
||||
|
||||
Если ЕстьКавычкаВНачале И Не ПеременнаяВНачале Тогда
|
||||
Результат = Кавычка + Результат;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
@@ -31,6 +31,7 @@
|
||||
Перем AWS4 Экспорт; // Структура
|
||||
Перем ТокенBearer Экспорт; // Строка
|
||||
Перем СоздатьКаталогСохраненияФайлов Экспорт; // Булево
|
||||
Перем ИменаПеременных Экспорт; // Массив из Строка
|
||||
|
||||
// Максимальное время ожидания на выполнение запроса
|
||||
Перем Таймаут Экспорт; // Число
|
||||
@@ -129,6 +130,7 @@
|
||||
AWS4 = НовыйAWS4();
|
||||
ТокенBearer = "";
|
||||
СоздатьКаталогСохраненияФайлов = Ложь;
|
||||
ИменаПеременных = Новый Массив();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -150,6 +152,10 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоПеременная(Имя) Экспорт
|
||||
Возврат Не ИменаПеременных.Найти(Имя) = Неопределено;
|
||||
КонецФункции
|
||||
|
||||
Функция НовоеОписаниеРесурса()
|
||||
|
||||
Описание = Новый Структура();
|
||||
|
||||
+42
-6
@@ -1,6 +1,7 @@
|
||||
#Использовать tokenizer
|
||||
|
||||
Перем АргументыКоманд; // Массив
|
||||
Перем АргументыКоманд; // Массив из Строка
|
||||
Перем Переменные; // Массив из Строка
|
||||
Перем Спецификация; // Массив
|
||||
Перем Токенайзер; // Токенайзер
|
||||
Перем ОткрытаКавычкаСПоддержкойИнтерполяции; // Булево
|
||||
@@ -19,10 +20,13 @@
|
||||
// Команда - Строка - Команда
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из Строка - Аргументы командной строки
|
||||
// Структура:
|
||||
// * АргументыКоманд - Массив из Строка
|
||||
// * ИменаПеременных - Массив из Строка
|
||||
Функция Распарсить(Команда) Экспорт
|
||||
|
||||
АргументыКоманд = Новый Массив;
|
||||
Переменные = Новый Массив;
|
||||
|
||||
ОткрытаКавычкаСПоддержкойИнтерполяции = Ложь;
|
||||
ОткрытаКавычкаБезПоддержкиИнтерполяции = Ложь;
|
||||
@@ -50,7 +54,7 @@
|
||||
|
||||
УдалитьПустуюПоследнююКоманду();
|
||||
|
||||
Возврат АргументыКоманд;
|
||||
Возврат Новый Структура("АргументыКоманд, ИменаПеременных", АргументыКоманд, Переменные);
|
||||
|
||||
КонецФункции
|
||||
|
||||
@@ -74,10 +78,11 @@
|
||||
Спецификация.Добавить(Новый СпецификацияТокенСимвол(СимволЭкранирования, "СимволЭкранирования"));
|
||||
Спецификация.Добавить(Новый СпецификацияТокенСимвол(КавычкаСПоддержкойИнтерполяции, "КавычкаСПоддержкойИнтерполяции"));
|
||||
Спецификация.Добавить(Новый СпецификацияТокенСимвол(КавычкаБезПоддержкиИнтерполяции, "КавычкаБезПоддержкиИнтерполяции"));
|
||||
Спецификация.Добавить(Новый СпецификацияТокенРегулярноеВыражение(Новый РегулярноеВыражение("^[;&|]+"), "ОператорСвязыванияКоманд"));
|
||||
Спецификация.Добавить(Новый СпецификацияТокенСимвол(Символы.ПС, "ПереносСтроки"));
|
||||
Спецификация.Добавить(Новый СпецификацияТокенРегулярноеВыражение(Новый РегулярноеВыражение("^\s"), "ПробельныйСимвол"));
|
||||
Спецификация.Добавить(Новый СпецификацияТокенРегулярноеВыражение(Новый РегулярноеВыражение("^[^'""\\\s]+"), "СтрокаБезСлужебныхСимволов")); // Строка до символов '"\ и пробельных символов
|
||||
Спецификация.Добавить(ТокенРегулярноеВыражение("^\$(?:[a-zA-Z_][a-zA-Z0-9_]*|\{[a-zA-Z_][a-zA-Z0-9_]*\})", "Переменная"));
|
||||
Спецификация.Добавить(ТокенРегулярноеВыражение("^(?:&&|\|\||[;&])", "ОператорСвязыванияКоманд"));
|
||||
Спецификация.Добавить(ТокенРегулярноеВыражение("^\s", "ПробельныйСимвол"));
|
||||
Спецификация.Добавить(ТокенРегулярноеВыражение("^[^'"";&$|\\\s]+", "СтрокаБезСлужебныхСимволов")); // Строка до символов '"\;&$| и пробельных символов
|
||||
|
||||
Возврат Спецификация;
|
||||
|
||||
@@ -145,6 +150,14 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Токен.ТипТокена() = "Переменная" Тогда
|
||||
Если Не ЭкранироватьСимвол И Не ОткрытаКавычкаБезПоддержкиИнтерполяции Тогда
|
||||
ДобавитьПеременную(Токен.Значение());
|
||||
Возврат ПолучитьСледующийТокен();
|
||||
КонецЕсли;
|
||||
Возврат Токен;
|
||||
КонецЕсли;
|
||||
|
||||
Если Токен.ТипТокена() = "ОператорСвязыванияКоманд" Тогда
|
||||
Если Не ЭкранироватьСимвол И Не ОткрытаКавычка() Тогда
|
||||
НачатьНовуюКоманду = Истина;
|
||||
@@ -248,6 +261,20 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьПеременную(Знач Значение)
|
||||
|
||||
ШаблонВТексте = "$ENV_%1";
|
||||
|
||||
Имя = Сред(Значение, 2);
|
||||
Имя = СтрЗаменить(Имя, "{", "");
|
||||
Имя = СтрЗаменить(Имя, "}", "");
|
||||
|
||||
Переменные.Добавить(Имя);
|
||||
|
||||
ДополнитьНакопительнуюСтроку(СтрШаблон(ШаблонВТексте, Имя));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОчиститьНакопительнуюСтроку()
|
||||
НакопленнаяСтрока = Неопределено;
|
||||
КонецПроцедуры
|
||||
@@ -269,4 +296,13 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ТокенРегулярноеВыражение(Паттерн, ТипТокена)
|
||||
|
||||
РегулярноеВыражение = Новый РегулярноеВыражение(Паттерн);
|
||||
РегулярноеВыражение.Многострочный = Ложь;
|
||||
|
||||
Возврат Новый СпецификацияТокенРегулярноеВыражение(РегулярноеВыражение, ТипТокена);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
@@ -21,16 +21,16 @@
|
||||
ЗарегистрированныеФайлы = Новый Массив;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбновтитьСтатичныеФайлы() Экспорт
|
||||
Процедура ОбновитьСтатичныеФайлы() Экспорт
|
||||
Если ТипЗнч(КаталогиСФайлами) = Тип("Соответствие") Тогда
|
||||
Для Каждого КиЗ Из КаталогиСФайлами Цикл
|
||||
Для Каждого КиЗ из КаталогиСФайлами Цикл
|
||||
ДобавитьКаталогСтатичныхФайлов(КиЗ.Значение, КиЗ.Ключ);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьКаталогСтатичныхФайлов(КаталогФайлов, ПутьНаСайте = "/") Экспорт
|
||||
Для Каждого ТипФайла Из Перечисления.ОписанияТиповРасширенийФайлов Цикл
|
||||
Для Каждого ТипФайла из Перечисления.ОписанияТиповРасширенийФайлов Цикл
|
||||
Файлы = НайтиФайлы(КаталогФайлов, "*." + ТипФайла.Ключ, Истина);
|
||||
Для каждого Файл Из Файлы Цикл
|
||||
ДобавитьМаршрутДоФайла(Файл, КаталогФайлов, ПутьНаСайте, ТипФайла.Значение);
|
||||
@@ -56,7 +56,24 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьМаршрутДоФайла(Файл, Знач КаталогФайлов, Знач ПутьНаСайте, Знач ТипКонтента)
|
||||
Процедура РегистрацияФайла(РасположениеНаСайте, ПутьНаДиске, ТипКонтента) Экспорт
|
||||
|
||||
СоответствиеПутей.Вставить(РасположениеНаСайте, Новый Структура("ПутьНаДиске, ТипКонтента", ПутьНаДиске, ТипКонтента));
|
||||
|
||||
Массив = Новый Массив();
|
||||
Массив.Добавить("Запрос");
|
||||
Массив.Добавить("Ответ");
|
||||
|
||||
Действие = Маршрутизатор.ОписаниеТочкиМаршрута();
|
||||
Действие.Желудь = ЭтотОбъект;
|
||||
Действие.ИмяМетода = "ОтдатьФайл";
|
||||
Действие.Параметры = Массив;
|
||||
|
||||
Маршрутизатор.ДобавитьМаршрут(РасположениеНаСайте, Действие);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьМаршрутДоФайла(Файл, знач КаталогФайлов, знач ПутьНаСайте, знач ТипКонтента)
|
||||
|
||||
Если Не СтрЗаканчиваетсяНа(КаталогФайлов, "/") Тогда
|
||||
КаталогФайлов = КаталогФайлов + "/";
|
||||
@@ -74,22 +91,11 @@
|
||||
|
||||
РасположениеНаСайте = СтрЗаменить(ОбъединитьПути(ПутьНаСайте, ПутьВПодкаталоге), "\", "/");
|
||||
|
||||
СоответствиеПутей.Вставить(РасположениеНаСайте, Новый Структура("ПутьНаДиске, ТипКонтента", ПутьЮниксСлешами, ТипКонтента));
|
||||
|
||||
Массив = Новый Массив();
|
||||
Массив.Добавить("Запрос");
|
||||
Массив.Добавить("Ответ");
|
||||
|
||||
Действие = Маршрутизатор.ОписаниеТочкиМаршрута();
|
||||
Действие.Желудь = ЭтотОбъект;
|
||||
Действие.ИмяМетода = "ОтдатьФайл";
|
||||
Действие.Параметры = Массив;
|
||||
|
||||
Маршрутизатор.ДобавитьМаршрут(РасположениеНаСайте, Действие);
|
||||
РегистрацияФайла(РасположениеНаСайте, ПутьЮниксСлешами, ТипКонтента);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПутьВПодкаталоге(Знач ПолныйПуть, Знач КаталогФайлов)
|
||||
Функция ПутьВПодкаталоге(знач ПолныйПуть, знач КаталогФайлов)
|
||||
|
||||
Если СтрНачинаетсяС(КаталогФайлов, ".") Тогда
|
||||
КаталогФайлов = Сред(КаталогФайлов, 2);
|
||||
|
||||
@@ -1,327 +0,0 @@
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция ЧтениеТекстовыхФайлов(Файлы, ПрочитанныеФайлы) Экспорт
|
||||
|
||||
Конструктор = Новый КонструкторПрограммногоКода();
|
||||
|
||||
НомерФайла = 1;
|
||||
Для Каждого ПередаваемыйФайл Из Файлы Цикл
|
||||
|
||||
Если Не (ПередаваемыйФайл.ПрочитатьСодержимое
|
||||
Или ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если НомерФайла > 1 Тогда
|
||||
Конструктор.ДобавитьПустуюСтроку();
|
||||
КонецЕсли;
|
||||
|
||||
Шаблон = "ЧтениеТекста = Новый ЧтениеТекста(%2);
|
||||
|%1 = ЧтениеТекста.Прочитать();";
|
||||
|
||||
Если ПередаваемыйФайл.УдалятьПереносыСтрок Тогда
|
||||
Шаблон = Шаблон + "
|
||||
|%1 = СтрЗаменить(%1, Символы.ПС, """");
|
||||
|%1 = СтрЗаменить(%1, Символы.ВК, """");";
|
||||
КонецЕсли;
|
||||
|
||||
Если ПередаваемыйФайл.КодироватьСодержимое Тогда
|
||||
Шаблон = Шаблон + "
|
||||
|%1 = КодироватьСтроку(%1, СпособКодированияСтроки.КодировкаURL);";
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПеременной = "{t(Переменная.ТекстовыеДанныеФайла)}_" + Формат(НомерФайла, "ЧГ=");
|
||||
|
||||
Конструктор.ДобавитьСтроку(Шаблон,
|
||||
ИмяПеременной,
|
||||
Конструктор.ПараметрВСтроку(ПередаваемыйФайл.ПолноеИмяФайла)
|
||||
);
|
||||
|
||||
ПрочитанныйФайл = Новый Структура();
|
||||
ПрочитанныйФайл.Вставить("ПередаваемыйФайл", ПередаваемыйФайл);
|
||||
ПрочитанныйФайл.Вставить("ИмяПеременной", ИмяПеременной);
|
||||
|
||||
ПрочитанныеФайлы.Добавить(ПрочитанныйФайл);
|
||||
|
||||
НомерФайла = НомерФайла + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Конструктор.ПолучитьРезультат();
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДанныеЗапроса(НазначениеДанных, ТекстовыеДанные, ПрочитанныеФайлы) Экспорт
|
||||
|
||||
Конструктор = Новый КонструкторПрограммногоКода();
|
||||
ЧастиКода = Новый Массив();
|
||||
|
||||
КонкатенацияСПереносомСтрокиИРазделителя = "
|
||||
| + ""%1"" + %2";
|
||||
КонкатенацияСПереносомСтроки = "
|
||||
| + %1";
|
||||
|
||||
НуженРазделитель = Ложь;
|
||||
МассивТекстовыхДанных = Новый Массив();
|
||||
Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл
|
||||
|
||||
Если Не ПередаваемыйТекст.Назначение = НазначениеДанных Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Разделитель = ПередаваемыйТекст.РазделительТелаЗапроса;
|
||||
Если НуженРазделитель И Не ПустаяСтрока(Разделитель) Тогда
|
||||
МассивТекстовыхДанных.Добавить(Разделитель);
|
||||
КонецЕсли;
|
||||
|
||||
МассивТекстовыхДанных.Добавить(ПередаваемыйТекст.ПолноеЗначение());
|
||||
|
||||
НуженРазделитель = Истина;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если МассивТекстовыхДанных.Количество() Тогда
|
||||
ЧастиКода.Добавить(Конструктор.ПараметрВСтроку(СтрСоединить(МассивТекстовыхДанных)));
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
|
||||
|
||||
ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
|
||||
|
||||
Если Не ПередаваемыйФайл.Назначение = НазначениеДанных Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
|
||||
Префикс = ПередаваемыйФайл.ИмяПоля + "=";
|
||||
ПрефиксВКоде = Конструктор.ПараметрВСтроку(Префикс) + " + ";
|
||||
Иначе
|
||||
Префикс = "";
|
||||
ПрефиксВКоде = "";
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПеременной = ПрочитанныйФайл.ИмяПеременной;
|
||||
Разделитель = ПередаваемыйФайл.РазделительТелаЗапроса;
|
||||
Если НуженРазделитель Тогда
|
||||
|
||||
Если Не ПустаяСтрока(Разделитель) Тогда
|
||||
|
||||
Текст = СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителя,
|
||||
ПередаваемыйФайл.РазделительТелаЗапроса + Префикс,
|
||||
ИмяПеременной);
|
||||
|
||||
ЧастиКода.Добавить(Текст);
|
||||
|
||||
Иначе
|
||||
|
||||
Текст = СтрШаблон(КонкатенацияСПереносомСтроки, ПрефиксВКоде + ИмяПеременной);
|
||||
ЧастиКода.Добавить(Текст);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
ЧастиКода.Добавить(ПрефиксВКоде + ИмяПеременной);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НуженРазделитель = Истина;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтрСоединить(ЧастиКода);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция URL(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
|
||||
|
||||
// Схема
|
||||
URL = """" + СтруктураURL.Схема + "://";
|
||||
|
||||
// Аутентификация
|
||||
Пользователь = СтруктураURL.Аутентификация.Пользователь;
|
||||
Пароль = СтруктураURL.Аутентификация.Пароль;
|
||||
|
||||
Если Не ПустаяСтрока(Пользователь) Или Не ПустаяСтрока(Пароль) Тогда
|
||||
URL = URL + СтрШаблон("%1:%2@", Пользователь, Пароль);
|
||||
КонецЕсли;
|
||||
|
||||
// Сервер
|
||||
URL = URL + СтруктураURL.Сервер;
|
||||
|
||||
// Порт
|
||||
Если ЗначениеЗаполнено(СтруктураURL.Порт) Тогда
|
||||
URL = URL + ":" + Формат(СтруктураURL.Порт, "ЧГ=");
|
||||
КонецЕсли;
|
||||
|
||||
// Адрес ресурса
|
||||
АдресРесурса = АдресРесурса(СтруктураURL, ТекстовыеДанные, ПрочитанныеФайлы);
|
||||
|
||||
Если ПустаяСтрока(АдресРесурса) Тогда
|
||||
URL = URL + """";
|
||||
Иначе
|
||||
URL = URL + Сред(АдресРесурса, 2);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат URL;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция АдресРесурса(СтруктураURL, ТекстовыеДанные = Неопределено, ПрочитанныеФайлы = Неопределено) Экспорт
|
||||
|
||||
Конструктор = Новый КонструкторПрограммногоКода();
|
||||
|
||||
РазделительПараметров = "&";
|
||||
КонкатенацияСПереносомСтрокиИРазделителем = "
|
||||
| + ""%1"" + ";
|
||||
КонкатенацияСПереносомСтроки = "
|
||||
| + ";
|
||||
|
||||
ПараметрыЗапроса = Новый Массив();
|
||||
|
||||
// Исходные параметры запроса
|
||||
Для Каждого Параметр Из СтруктураURL.ПараметрыЗапроса Цикл
|
||||
|
||||
КлючИЗначение = СтрШаблон("%1=%2",
|
||||
КодироватьСтроку(Параметр.Ключ, СпособКодированияСтроки.КодировкаURL),
|
||||
КодироватьСтроку(Параметр.Значение, СпособКодированияСтроки.КодировкаURL));
|
||||
|
||||
ПараметрыЗапроса.Добавить(КлючИЗначение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
// Дополняемые параметры запроса
|
||||
Если Не ТекстовыеДанные = Неопределено Тогда
|
||||
Для Каждого ПередаваемыйТекст Из ТекстовыеДанные Цикл
|
||||
Если ПередаваемыйТекст.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
|
||||
|
||||
Если ПараметрыЗапроса.Количество() И Не ПустаяСтрока(ПередаваемыйТекст.РазделительТелаЗапроса) Тогда
|
||||
ПараметрыЗапроса.Добавить(ПередаваемыйТекст.РазделительТелаЗапроса);
|
||||
КонецЕсли;
|
||||
|
||||
ПараметрыЗапроса.Добавить(ПередаваемыйТекст.ПолноеЗначение());
|
||||
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
// Параметры запроса из файлов
|
||||
ПараметрыЗапросаИзФайловСтрокой = "";
|
||||
Если Не ПрочитанныеФайлы = Неопределено Тогда
|
||||
Для Каждого ПрочитанныйФайл Из ПрочитанныеФайлы Цикл
|
||||
|
||||
ПередаваемыйФайл = ПрочитанныйФайл.ПередаваемыйФайл;
|
||||
|
||||
Если ПередаваемыйФайл.Назначение = НазначенияПередаваемыхДанных.СтрокаЗапроса Тогда
|
||||
|
||||
Если ЗначениеЗаполнено(ПередаваемыйФайл.ИмяПоля) Тогда
|
||||
Префикс = ПередаваемыйФайл.ИмяПоля + "=";
|
||||
ПрефиксВКоде = Конструктор.ПараметрВСтроку(Префикс) + " + ";
|
||||
Иначе
|
||||
Префикс = "";
|
||||
ПрефиксВКоде = "";
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПеременной = ПрочитанныйФайл.ИмяПеременной;
|
||||
|
||||
Если ПараметрыЗапросаИзФайловСтрокой = "" Тогда
|
||||
ПараметрыЗапросаИзФайловСтрокой = ПрефиксВКоде + ИмяПеременной;
|
||||
Иначе
|
||||
ПараметрыЗапросаИзФайловСтрокой = ПараметрыЗапросаИзФайловСтрокой
|
||||
+ СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителем, РазделительПараметров + Префикс)
|
||||
+ ИмяПеременной;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
// Сборка адреса
|
||||
ПараметрыЗапросаСтрокой = СтрСоединить(ПараметрыЗапроса);
|
||||
ЕстьПараметрыЗапроса = Не ПустаяСтрока(ПараметрыЗапросаСтрокой) Или Не ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой);
|
||||
|
||||
ПерваяЧасть = СтруктураURL.Путь
|
||||
+ ?(ЕстьПараметрыЗапроса, "?", "")
|
||||
+ ПараметрыЗапросаСтрокой;
|
||||
|
||||
ВтораяЧасть = ?(Не ПустаяСтрока(СтруктураURL.Фрагмент), "#" + СтруктураURL.Фрагмент, "");
|
||||
|
||||
Если ПустаяСтрока(ПараметрыЗапросаИзФайловСтрокой) Тогда
|
||||
|
||||
Результат = ПерваяЧасть + ВтораяЧасть;
|
||||
|
||||
Если ЗначениеЗаполнено(Результат) Тогда
|
||||
Результат = Конструктор.ПараметрВСтроку(Результат);
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
ВозможноОднойСтрокой = ПустаяСтрока(ВтораяЧасть) И СтрЧислоСтрок(ПараметрыЗапросаИзФайловСтрокой) = 1;
|
||||
|
||||
Если ВозможноОднойСтрокой Тогда
|
||||
|
||||
Результат = ""
|
||||
+ Конструктор.ПараметрВСтроку(ПерваяЧасть + ?(ПустаяСтрока(ПараметрыЗапросаСтрокой), "", РазделительПараметров))
|
||||
+ " + "
|
||||
+ ПараметрыЗапросаИзФайловСтрокой;
|
||||
|
||||
Иначе
|
||||
|
||||
Результат = Конструктор.ПараметрВСтроку(ПерваяЧасть);
|
||||
|
||||
Если ПустаяСтрока(ПараметрыЗапросаСтрокой) Тогда
|
||||
Результат = Результат
|
||||
+ КонкатенацияСПереносомСтроки
|
||||
+ ПараметрыЗапросаИзФайловСтрокой;
|
||||
ИначеЕсли Лев(ПараметрыЗапросаИзФайловСтрокой, 1) = """" Тогда
|
||||
Результат = Результат
|
||||
+ КонкатенацияСПереносомСтроки
|
||||
+ """" + РазделительПараметров
|
||||
+ Сред(ПараметрыЗапросаИзФайловСтрокой, 2);
|
||||
Иначе
|
||||
Результат = Результат
|
||||
+ СтрШаблон(КонкатенацияСПереносомСтрокиИРазделителем, РазделительПараметров)
|
||||
+ ПараметрыЗапросаИзФайловСтрокой;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПустаяСтрока(ВтораяЧасть) Тогда
|
||||
Результат = Результат
|
||||
+ КонкатенацияСПереносомСтроки
|
||||
+ Конструктор.ПараметрВСтроку(ВтораяЧасть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИнтернетПрокси(ОписаниеЗапроса, ИмяПараметра) Экспорт
|
||||
|
||||
Конструктор = Новый КонструкторПрограммногоКода();
|
||||
|
||||
ИспользоватьАутентификациюОС = ОписаниеЗапроса.ТипАутентификацииПрокси = ТипыАутентификации.NTLM;
|
||||
|
||||
ПараметрыФункции = Новый Массив;
|
||||
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиПротокол));
|
||||
ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(ОписаниеЗапроса.ПроксиСервер));
|
||||
ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПорт));
|
||||
ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПользователь));
|
||||
ПараметрыФункции.Добавить(Конструктор.НеобязательныйПараметрВСтроку(ОписаниеЗапроса.ПроксиПароль));
|
||||
ПараметрыФункции.Добавить(?(ИспользоватьАутентификациюОС, "", "Ложь")); // Значение по умолчанию Истина
|
||||
|
||||
Конструктор
|
||||
.ДобавитьСтроку("%1 = Новый ИнтернетПрокси();", ИмяПараметра)
|
||||
.ДобавитьСтроку("%1.Установить(%2);",
|
||||
ИмяПараметра,
|
||||
Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)
|
||||
);
|
||||
|
||||
Возврат Конструктор.ПолучитьРезультат();
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
@@ -92,7 +92,7 @@
|
||||
|
||||
Возврат Неопределено;
|
||||
|
||||
КонецПопытки
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
@@ -2002,7 +2002,7 @@
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example16.com/ --form-string name=@data;type=some",
|
||||
"curl http://example16.com/ --form-string 'name=@data;type=some'",
|
||||
"РазделительMultipart = СтрЗаменить(Новый УникальныйИдентификатор, ""-"", """");
|
||||
|
|
||||
|Заголовки = Новый Соответствие();
|
||||
@@ -2027,7 +2027,7 @@
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example17.com/ -F name=John= -F brief=doctor=111;type=text/foo",
|
||||
"curl http://example17.com/ -F name=John= -F 'brief=doctor=111;type=text/foo'",
|
||||
"РазделительMultipart = СтрЗаменить(Новый УникальныйИдентификатор, ""-"", """");
|
||||
|
|
||||
|Заголовки = Новый Соответствие();
|
||||
@@ -2059,7 +2059,7 @@
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example18.com/ -F profile=@portrait.jpg;type=text/html,@file1.pdf,@file2.pdf;type=text/xml",
|
||||
"curl http://example18.com/ -F 'profile=@portrait.jpg;type=text/html,@file1.pdf,@file2.pdf;type=text/xml'",
|
||||
"РазделительMultipart = СтрЗаменить(Новый УникальныйИдентификатор, ""-"", """");
|
||||
|
|
||||
|Заголовки = Новый Соответствие();
|
||||
@@ -2142,7 +2142,7 @@
|
||||
|
||||
Для Каждого Строка Из ТестовыеДанные Цикл
|
||||
ПроверитьКонвертациюБезОшибок(Строка.Ключ, Строка.Значение);
|
||||
КонецЦикла
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -2189,6 +2189,79 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьПеременные() Экспорт
|
||||
|
||||
ТестовыеДанные = Новый Соответствие();
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com -u usr:$PASSWORD",
|
||||
"PASSWORD = """";
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80, ""usr"", PASSWORD);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/"");
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com -H ""PRIVATE-TOKEN: $TOKEN""",
|
||||
"TOKEN = """";
|
||||
|
|
||||
|Заголовки = Новый Соответствие();
|
||||
|Заголовки.Вставить(""PRIVATE-TOKEN"", TOKEN);
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com?search=$QUERY1$QUERY2",
|
||||
"QUERY1 = """";
|
||||
|QUERY2 = """";
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""?search="" + QUERY1 + QUERY2);
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com -d name=$NAME -d surname=$SURNAME",
|
||||
"NAME = """";
|
||||
|SURNAME = """";
|
||||
|
|
||||
|Заголовки = Новый Соответствие();
|
||||
|Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded"");
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки);
|
||||
|HTTPЗапрос.УстановитьТелоИзСтроки(""name="" + NAME + ""&surname="" + SURNAME);
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://$HOST/$PATH?$QUERY#$FRAGMENT",
|
||||
"HOST = """";
|
||||
|PATH = """";
|
||||
|QUERY = """";
|
||||
|FRAGMENT = """";
|
||||
|
|
||||
|Соединение = Новый HTTPСоединение(HOST, 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/"" + PATH + ""?"" + QUERY + ""#"" + FRAGMENT);
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"
|
||||
);
|
||||
|
||||
Для Каждого Строка Из ТестовыеДанные Цикл
|
||||
ПроверитьКонвертациюБезОшибок(Строка.Ключ, Строка.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод, Генератор = Неопределено)
|
||||
|
||||
Если Генератор = Неопределено Тогда
|
||||
|
||||
@@ -1156,9 +1156,9 @@
|
||||
|curl http://example13.com/ -F ""json=@data.json;headers=\""X-header: value\""""
|
||||
|curl http://example14.com/ -F ""json=@data.json;headers=\""X-header-1: some value 1\"";headers=\""X-header-2: some value 2\""""
|
||||
|curl http://example15.com/ --form-string name=data
|
||||
|curl http://example16.com/ --form-string name=@data;type=some
|
||||
|curl http://example17.com/ -F name=John= -F brief=doctor=111;type=text/foo
|
||||
|curl http://example18.com/ -F profile=@portrait.jpg;type=text/html,@file1.pdf,@file2.pdf;type=text/xml
|
||||
|curl http://example16.com/ --form-string 'name=@data;type=some'
|
||||
|curl http://example17.com/ -F name=John= -F 'brief=doctor=111;type=text/foo'
|
||||
|curl http://example18.com/ -F 'profile=@portrait.jpg;type=text/html,@file1.pdf,@file2.pdf;type=text/xml'
|
||||
|
|
||||
|curl http://example19.com/ \
|
||||
|-F multiline1=""line1
|
||||
@@ -1481,6 +1481,72 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьПеременные() Экспорт
|
||||
|
||||
ТестовыеДанные = Новый Соответствие();
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com -u usr:$PASSWORD",
|
||||
"PASSWORD = """";
|
||||
|
|
||||
|Аутентификация = Новый Структура(""Пользователь, Пароль"", ""usr"", PASSWORD);
|
||||
|
|
||||
|ДополнительныеПараметры = Новый Структура();
|
||||
|ДополнительныеПараметры.Вставить(""Аутентификация"", Аутентификация);
|
||||
|
|
||||
|Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com -H ""PRIVATE-TOKEN: $TOKEN""",
|
||||
"TOKEN = """";
|
||||
|
|
||||
|Заголовки = Новый Соответствие();
|
||||
|Заголовки.Вставить(""PRIVATE-TOKEN"", TOKEN);
|
||||
|
|
||||
|ДополнительныеПараметры = Новый Структура();
|
||||
|ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки);
|
||||
|
|
||||
|Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com?search=$QUERY1$QUERY2",
|
||||
"QUERY1 = """";
|
||||
|QUERY2 = """";
|
||||
|
|
||||
|Результат = КоннекторHTTP.Get(""http://example.com?search="" + QUERY1 + QUERY2);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://example.com -d name=$NAME -d surname=$SURNAME",
|
||||
"NAME = """";
|
||||
|SURNAME = """";
|
||||
|
|
||||
|Данные = Новый Соответствие();
|
||||
|Данные.Вставить(""name"", NAME);
|
||||
|Данные.Вставить(""surname"", SURNAME);
|
||||
|
|
||||
|Результат = КоннекторHTTP.Post(""http://example.com"", Данные);"
|
||||
);
|
||||
|
||||
ТестовыеДанные.Вставить(
|
||||
"curl http://$HOST/$PATH?$QUERY#$FRAGMENT",
|
||||
"HOST = """";
|
||||
|PATH = """";
|
||||
|QUERY = """";
|
||||
|FRAGMENT = """";
|
||||
|
|
||||
|Результат = КоннекторHTTP.Get(""http://"" + HOST + ""/"" + PATH + ""?"" + QUERY + ""#"" + FRAGMENT);"
|
||||
);
|
||||
|
||||
Для Каждого Строка Из ТестовыеДанные Цикл
|
||||
ПроверитьКонвертациюБезОшибок(Строка.Ключ, Строка.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверитьКонвертациюБезОшибок(КонсольнаяКоманда, ПрограммныйКод, Генератор = Неопределено)
|
||||
|
||||
Если Генератор = Неопределено Тогда
|
||||
@@ -1490,10 +1556,11 @@
|
||||
// Результат конвертации
|
||||
Ошибки = Неопределено;
|
||||
|
||||
КонвертерКомандыCURL.УстановитьЯзыкПеревода("ru");
|
||||
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор, Ошибки);
|
||||
|
||||
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
|
||||
Ожидаем.Что(Ошибки).Не_().Заполнено();
|
||||
Ожидаем.Что(Результат, КонсольнаяКоманда).Равно(ПрограммныйКод);
|
||||
Ожидаем.Что(Ошибки, КонсольнаяКоманда).Не_().Заполнено();
|
||||
|
||||
// Перевод
|
||||
КонвертерКомандыCURL.УстановитьЯзыкПеревода("en");
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// BSLLS:DuplicateStringLiteral-off
|
||||
|
||||
#Использовать asserts
|
||||
#Использовать "../src/core"
|
||||
#Использовать "../src/internal"
|
||||
@@ -132,10 +134,10 @@
|
||||
&Тест
|
||||
Процедура ТестДолжен_ПроверитьОператорыСвязыванияКоманд() Экспорт
|
||||
|
||||
КоманднаяСтрока = "myapp -a & myapp -b
|
||||
КоманднаяСтрока = "myapp -a && myapp -b
|
||||
|myapp -c '&' &
|
||||
|command1 ; command2 ;
|
||||
|command3 | command4";
|
||||
|cmd1 & cmd2 && cmd3 || cmd4 ; cmd5
|
||||
|cmd6&&cmd7||cmd8;cmd9";
|
||||
|
||||
Эталон = Новый Массив;
|
||||
|
||||
@@ -155,21 +157,11 @@
|
||||
Команда.Добавить("&");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив();
|
||||
Команда.Добавить("command1");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив();
|
||||
Команда.Добавить("command2");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив();
|
||||
Команда.Добавить("command3");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив();
|
||||
Команда.Добавить("command4");
|
||||
Эталон.Добавить(Команда);
|
||||
Для к = 1 по 9 Цикл
|
||||
Команда = Новый Массив();
|
||||
Команда.Добавить("cmd" + к);
|
||||
Эталон.Добавить(Команда);
|
||||
КонецЦикла;
|
||||
|
||||
Парсер = Новый ПарсерКонсольнойКоманды();
|
||||
Результат = Парсер.Распарсить(КоманднаяСтрока);
|
||||
@@ -395,17 +387,59 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_РаспарситьПеременные() Экспорт
|
||||
|
||||
КоманднаяСтрока = "myapp -a $VAR
|
||||
|myapp ""$VAR""
|
||||
|myapp -a '$VAR'
|
||||
|myapp -a ""Text$VAR text""";
|
||||
|
||||
Эталон = Новый Массив;
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp");
|
||||
Команда.Добавить("-a");
|
||||
Команда.Добавить("$ENV_VAR");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp");
|
||||
Команда.Добавить("$ENV_VAR");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp");
|
||||
Команда.Добавить("-a");
|
||||
Команда.Добавить("$VAR");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Команда = Новый Массив;
|
||||
Команда.Добавить("myapp");
|
||||
Команда.Добавить("-a");
|
||||
Команда.Добавить("Text$ENV_VAR text");
|
||||
Эталон.Добавить(Команда);
|
||||
|
||||
Парсер = Новый ПарсерКонсольнойКоманды();
|
||||
Результат = Парсер.Распарсить(КоманднаяСтрока);
|
||||
|
||||
ПроверитьРезультатПарсинга(Результат, Эталон);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПроверитьРезультатПарсинга(Результат, Эталон)
|
||||
|
||||
Ожидаем.Что(Результат, "Количество команд").ИмеетДлину(Эталон.Количество());
|
||||
АргументыКоманд = Результат.АргументыКоманд;
|
||||
|
||||
Для Инд1 = 0 По Результат.ВГраница() Цикл
|
||||
Ожидаем.Что(АргументыКоманд, "Количество команд").ИмеетДлину(Эталон.Количество());
|
||||
|
||||
Для Инд1 = 0 По АргументыКоманд.ВГраница() Цикл
|
||||
Заголовок = СтрШаблон("Инд1: %1", Инд1);
|
||||
Ожидаем.Что(Результат[Инд1], Заголовок).ИмеетДлину(Эталон[Инд1].Количество());
|
||||
Ожидаем.Что(АргументыКоманд[Инд1], Заголовок).ИмеетДлину(Эталон[Инд1].Количество());
|
||||
|
||||
Для Инд2 = 0 По Результат[Инд1].ВГраница() Цикл
|
||||
Для Инд2 = 0 По АргументыКоманд[Инд1].ВГраница() Цикл
|
||||
Заголовок = СтрШаблон("Инд1: %1, Инд2 : %2", Инд1, Инд2);
|
||||
Ожидаем.Что(Результат[Инд1][Инд2], Заголовок).Равно(Эталон[Инд1][Инд2]);
|
||||
Ожидаем.Что(АргументыКоманд[Инд1][Инд2], Заголовок).Равно(Эталон[Инд1][Инд2]);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user