mirror of
https://github.com/alei1180/curlone.git
synced 2026-06-21 01:30:38 +02:00
This commit is contained in:
@@ -15,7 +15,7 @@ Copyright 2024 Aleksey Khorev (https://github.com/khorevaa)
|
||||
limitations under the License.
|
||||
|
||||
|
||||
License for src/Классы/internal/Классы/ПарсерURL.os (https://github.com/vbondarevsky/1connector)
|
||||
License for src/Классы/internal/Классы/РазборURL.os (https://github.com/vbondarevsky/1connector)
|
||||
--------------------------------------
|
||||
Copyright 2019-2020 Vladimir Bondarevskiy
|
||||
|
||||
|
||||
@@ -24,4 +24,5 @@
|
||||
.РазработкаЗависитОт("1testrunner")
|
||||
.РазработкаЗависитОт("asserts")
|
||||
.РазработкаЗависитОт("coverage")
|
||||
.РазработкаЗависитОт("1connector")
|
||||
.ИсполняемыйФайл("src/main.os", "curlone")
|
||||
|
||||
@@ -354,7 +354,7 @@
|
||||
|
||||
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
|
||||
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
ИспользуетсяЗащищенноеСоединение = ИспользуетсяЗащищенноеСоединение(СтруктураURL);
|
||||
|
||||
Если ИспользуетсяЗащищенноеСоединение Тогда
|
||||
@@ -451,7 +451,7 @@
|
||||
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
|
||||
|
||||
НомерЗапроса = НомерЗапроса + 1;
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
ВызванМетодПоТекущемуURL = Ложь;
|
||||
|
||||
Конструктор.ДобавитьПустуюСтроку();
|
||||
@@ -523,7 +523,7 @@
|
||||
);
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
|
||||
СтруктураURL.Путь = ОбщийНаборИнструментов.ДополнитьИменемФайлаПутьURL(
|
||||
ПередаваемыйФайл.ПолноеИмяФайла,
|
||||
|
||||
@@ -572,7 +572,7 @@
|
||||
);
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
Если ПередаваемыйФайл.ДобавлятьИмяФайлаКURL Тогда
|
||||
СтруктураURL.Путь = ОбщийНаборИнструментов.ДополнитьИменемФайлаПутьURL(ПередаваемыйФайл.ПолноеИмяФайла, СтруктураURL.Путь);
|
||||
КонецЕсли;
|
||||
@@ -740,7 +740,7 @@
|
||||
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
|
||||
|
||||
НомерЗапроса = НомерЗапроса + 1;
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
Состояние.ВызванМетодПоТекущемуURL = Ложь;
|
||||
|
||||
Если Не ОбщийНаборИнструментов.ЭтоHTTP(СтруктураURL.Схема) Тогда
|
||||
@@ -776,7 +776,7 @@
|
||||
Процедура ДобавитьВызовМетода(ОписаниеРесурса, Знач СтруктураURL = Неопределено, Знач ДанныеЗапроса = Неопределено)
|
||||
|
||||
Если СтруктураURL = Неопределено Тогда
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
КонецЕсли;
|
||||
|
||||
Если ДанныеЗапроса = Неопределено Тогда
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
Если ОбщийНаборИнструментов.ЭтоHTTP(СтруктураURL.Схема) Тогда
|
||||
|
||||
Если ЕстьМетодPOST Тогда
|
||||
@@ -318,13 +318,13 @@
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ПарсерURL = Новый ПарсерURL(ОписаниеАдреса.URL);
|
||||
РазборURL = Новый РазборURL(ОписаниеАдреса.URL);
|
||||
|
||||
ИндексСлеша = СтрНайти(ПарсерURL.Путь, "/", НаправлениеПоиска.СКонца);
|
||||
ИндексСлеша = СтрНайти(РазборURL.Путь, "/", НаправлениеПоиска.СКонца);
|
||||
Если ИндексСлеша Тогда
|
||||
ИмяВыходногоФайла = СокрЛП(Сред(ПарсерURL.Путь, ИндексСлеша + 1));
|
||||
ИмяВыходногоФайла = СокрЛП(Сред(РазборURL.Путь, ИндексСлеша + 1));
|
||||
Иначе
|
||||
ИмяВыходногоФайла = ПарсерURL.Путь;
|
||||
ИмяВыходногоФайла = РазборURL.Путь;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(ИмяВыходногоФайла) Тогда
|
||||
@@ -989,16 +989,16 @@
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ПарсерURL = Новый ПарсерURL(АдресПрокси);
|
||||
РазборURL = Новый РазборURL(АдресПрокси);
|
||||
|
||||
ОписаниеЗапроса.ПроксиСервер = ПарсерURL.Сервер;
|
||||
ОписаниеЗапроса.ПроксиСервер = РазборURL.Сервер;
|
||||
|
||||
ОписаниеЗапроса.ПроксиПротокол = НРег(ПарсерURL.Схема);
|
||||
ОписаниеЗапроса.ПроксиПротокол = НРег(РазборURL.Схема);
|
||||
Если Не ЗначениеЗаполнено(ОписаниеЗапроса.ПроксиПротокол) Тогда
|
||||
ОписаниеЗапроса.ПроксиПротокол = ПротоколыURL.HTTP;
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеЗапроса.ПроксиПорт = ПарсерURL.Порт;
|
||||
ОписаниеЗапроса.ПроксиПорт = РазборURL.Порт;
|
||||
Если Не ЗначениеЗаполнено(ОписаниеЗапроса.ПроксиПорт) Тогда
|
||||
ОписаниеЗапроса.ПроксиПорт = 1080;
|
||||
КонецЕсли;
|
||||
@@ -1667,7 +1667,7 @@
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ОписаниеРесурса Из ОписаниеЗапроса.АдресаРесурсов Цикл
|
||||
СтруктураURL = Новый ПарсерURL(ОписаниеРесурса.URL);
|
||||
СтруктураURL = Новый РазборURL(ОписаниеРесурса.URL);
|
||||
Если ПоддерживаемыеПротоколы.Найти(СтруктураURL.Схема) = Неопределено Тогда
|
||||
ТекстОшибки = СтрШаблон("Протокол ""%1"" не поддерживается", СтруктураURL.Схема);
|
||||
ИсходящиеОшибки.Добавить(ОбщийНаборИнструментов.НоваяКритичнаяОшибка(ТекстОшибки));
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
#Использовать "../../core"
|
||||
#Использовать jason
|
||||
#Использовать "../../core"
|
||||
|
||||
Перем КонвертерКомандыCURL; // см. КонвертерКомандыCURL
|
||||
Перем КонвертерКомандыCURL; // КонвертерКомандыCURL
|
||||
Перем СериализаторJson; // СериализаторJson
|
||||
|
||||
&Контроллер("/")
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
|
||||
СериализаторJson = Новый СериализаторJson();
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("")
|
||||
&Отображение("./src/interface/view/index.html")
|
||||
Процедура Главная(Ответ) Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("/api")
|
||||
@@ -22,7 +23,6 @@
|
||||
&ТочкаМаршрута("/api/v1")
|
||||
&Отображение("./src/interface/view/api.html")
|
||||
Процедура APIv1() Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&ТочкаМаршрута("/api/v1/convert")
|
||||
@@ -36,16 +36,14 @@
|
||||
Локаль = ПараметрыЗапросаИменные.Получить("locale");
|
||||
ДесериализоватьОтветИзJSON = НРег(ПараметрыЗапросаИменные.Получить("response-type")) = "json";
|
||||
|
||||
Если Локаль = Неопределено Тогда
|
||||
Локаль = ЛокальПоУмолчанию();
|
||||
КонецЕсли;
|
||||
|
||||
Если ТекстКоманды <> Неопределено Тогда
|
||||
|
||||
Если КонвертерКомандыCURL = Неопределено Тогда
|
||||
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
|
||||
КонецЕсли;
|
||||
КонвертерКомандыCURL.УстановитьЯзыкПеревода(Локаль);
|
||||
|
||||
Если ЗначениеЗаполнено(Локаль) Тогда
|
||||
КонвертерКомандыCURL.УстановитьЯзыкПеревода(Локаль);
|
||||
КонецЕсли;
|
||||
|
||||
Генератор = ПолучитьГенератор(Язык);
|
||||
Генератор.ДесериализоватьОтветИзJSON(ДесериализоватьОтветИзJSON);
|
||||
|
||||
@@ -66,10 +64,8 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Сериализатор = Новый СериализаторJson();
|
||||
|
||||
Ответ.УстановитьТипКонтента("json");
|
||||
Ответ.ТелоТекст = Сериализатор.Сериализовать(ДанныеОтвета);
|
||||
Ответ.ТелоТекст = СериализаторJson.Сериализовать(ДанныеОтвета);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@@ -89,6 +85,10 @@
|
||||
Возврат Новый ГенераторПрограммногоКода1С();
|
||||
КонецФункции
|
||||
|
||||
Функция ЛокальПоУмолчанию()
|
||||
Возврат "ru";
|
||||
КонецФункции
|
||||
|
||||
Функция НоваяОшибка(Текст, Критичная = Ложь)
|
||||
Возврат Новый Структура("text, critical", Текст, Критичная);
|
||||
КонецФункции
|
||||
@@ -1,7 +1,7 @@
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
Перем _СтруктураURL; // ПарсерURL
|
||||
Перем _СтруктураURL; // РазборURL
|
||||
Перем _ТекстовыеДанные; // Массив из ПередаваемыйТекст
|
||||
Перем _ПрочитанныеФайлы; // Массив из Структура:
|
||||
// - ПередаваемыйФайл - см. ПередаваемыйФайл
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
|
||||
Перем _ОписаниеЗапроса; // ОписаниеЗапроса
|
||||
Перем _СтруктураURL; // ПарсерURL
|
||||
Перем _СтруктураURL; // РазборURL
|
||||
Перем _ТекстовыеДанные; // Массив из ПередаваемыйТекст
|
||||
Перем _ПрочитанныеФайлы; // Массив из Структура:
|
||||
// - ПередаваемыйФайл - см. ПередаваемыйФайл
|
||||
|
||||
@@ -0,0 +1,208 @@
|
||||
// BSLLS:DuplicateStringLiteral-off
|
||||
|
||||
#Использовать 1connector
|
||||
#Использовать jason
|
||||
|
||||
Перем ПроцессВебСервера; // Процесс
|
||||
|
||||
&Инициализация
|
||||
Процедура Инициализация() Экспорт
|
||||
|
||||
ПроцессВебСервера = СоздатьПроцесс("oscript src/main.os web", ".");
|
||||
ПроцессВебСервера.Запустить();
|
||||
|
||||
НачатьОжиданиеЗапуска();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
&Завершение
|
||||
Процедура Завершение() Экспорт
|
||||
ПроцессВебСервера.Завершить();
|
||||
КонецПроцедуры
|
||||
|
||||
&Тест
|
||||
Процедура ТестДолжен_ВыполнитьКонвертацию() Экспорт
|
||||
|
||||
Сериализатор = Новый СериализаторJson();
|
||||
|
||||
ТестовыеСлучаи = НоваяТаблицаТестовыхСлучаев();
|
||||
|
||||
НовыйТестовыйСлучай(
|
||||
ТестовыеСлучаи,
|
||||
"curl http://example.com",
|
||||
Неопределено,
|
||||
Неопределено,
|
||||
Неопределено,
|
||||
"Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/"");
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"
|
||||
);
|
||||
|
||||
НовыйТестовыйСлучай(
|
||||
ТестовыеСлучаи,
|
||||
"curl http://example.com",
|
||||
"1c",
|
||||
Неопределено,
|
||||
Неопределено,
|
||||
"Соединение = Новый HTTPСоединение(""example.com"", 80);
|
||||
|HTTPЗапрос = Новый HTTPЗапрос(""/"");
|
||||
|
|
||||
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);"
|
||||
);
|
||||
|
||||
НовыйТестовыйСлучай(
|
||||
ТестовыеСлучаи,
|
||||
"curl http://example.com",
|
||||
Неопределено,
|
||||
"en",
|
||||
Неопределено,
|
||||
"Connection = New HTTPConnection(""example.com"", 80);
|
||||
|HTTPRequest = New HTTPRequest(""/"");
|
||||
|
|
||||
|HTTPResponse = Connection.CallHTTPMethod(""GET"", HTTPRequest);"
|
||||
);
|
||||
|
||||
НовыйТестовыйСлучай(
|
||||
ТестовыеСлучаи,
|
||||
"curl http://example.com",
|
||||
"connector",
|
||||
Неопределено,
|
||||
Неопределено,
|
||||
"Результат = КоннекторHTTP.Get(""http://example.com"");"
|
||||
);
|
||||
|
||||
НовыйТестовыйСлучай(
|
||||
ТестовыеСлучаи,
|
||||
"curl http://example.com",
|
||||
"connector",
|
||||
"en",
|
||||
Неопределено,
|
||||
"Result = HTTPConnector.Get(""http://example.com"");"
|
||||
);
|
||||
|
||||
НовыйТестовыйСлучай(
|
||||
ТестовыеСлучаи,
|
||||
"curl http://example.com",
|
||||
"connector",
|
||||
"ru",
|
||||
Неопределено,
|
||||
"Результат = КоннекторHTTP.Get(""http://example.com"");"
|
||||
);
|
||||
|
||||
НовыйТестовыйСлучай(
|
||||
ТестовыеСлучаи,
|
||||
"curl http://example.com",
|
||||
"connector",
|
||||
Неопределено,
|
||||
"json",
|
||||
"Результат = КоннекторHTTP.GetJson(""http://example.com"");"
|
||||
);
|
||||
|
||||
Для Каждого ТестовыйСлучай Из ТестовыеСлучаи Цикл
|
||||
|
||||
ПараметрыЗапроса = Новый Соответствие();
|
||||
ПараметрыЗапроса.Вставить("cmd", ТестовыйСлучай.Команда);
|
||||
|
||||
Если ТестовыйСлучай.Язык <> Неопределено Тогда
|
||||
ПараметрыЗапроса.Вставить("lang", ТестовыйСлучай.Язык);
|
||||
КонецЕсли;
|
||||
|
||||
Если ТестовыйСлучай.Локаль <> Неопределено Тогда
|
||||
ПараметрыЗапроса.Вставить("locale", ТестовыйСлучай.Локаль);
|
||||
КонецЕсли;
|
||||
|
||||
Если ТестовыйСлучай.ТипОтвета <> Неопределено Тогда
|
||||
ПараметрыЗапроса.Вставить("response-type", ТестовыйСлучай.ТипОтвета);
|
||||
КонецЕсли;
|
||||
|
||||
Json = Сериализатор.Сериализовать(ПараметрыЗапроса);
|
||||
|
||||
// Действие
|
||||
Ответ = ВыполнитьЗапросКонвертации(ПараметрыЗапроса);
|
||||
|
||||
// Проверка
|
||||
Ожидаем.Что(Ответ["result"], Json).Равно(ТестовыйСлучай.Результат);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция НоваяТаблицаТестовыхСлучаев()
|
||||
|
||||
Таблица = Новый ТаблицаЗначений();
|
||||
Таблица.Колонки.Добавить("Команда");
|
||||
Таблица.Колонки.Добавить("Язык");
|
||||
Таблица.Колонки.Добавить("Локаль");
|
||||
Таблица.Колонки.Добавить("ТипОтвета");
|
||||
Таблица.Колонки.Добавить("Результат");
|
||||
|
||||
Возврат Таблица;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура НовыйТестовыйСлучай(ТестовыеСлучаи, Команда, Язык, Локаль, ТипОтвета, Результат)
|
||||
|
||||
Строка = ТестовыеСлучаи.Добавить();
|
||||
Строка.Команда = Команда;
|
||||
Строка.Язык = Язык;
|
||||
Строка.Локаль = Локаль;
|
||||
Строка.ТипОтвета = ТипОтвета;
|
||||
Строка.Результат = Результат;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ВыполнитьЗапросКонвертации(ПараметрыЗапроса)
|
||||
Возврат КоннекторHTTP.Get(СтрШаблон("%1/api/v1/convert", URL()), ПараметрыЗапроса).Json();
|
||||
КонецФункции
|
||||
|
||||
Процедура НачатьОжиданиеЗапуска()
|
||||
|
||||
ЗадержкаМеждуПопытками = 100; // Миллисекунд
|
||||
ТаймаутОжидания = 5; // Секунд
|
||||
ВремяНачала = ТекущаяУниверсальнаяДата();
|
||||
|
||||
Пока Истина Цикл
|
||||
|
||||
КодСостояния = Неопределено;
|
||||
ТекстИсключения = "";
|
||||
Попытка
|
||||
Ответ = КоннекторHTTP.Head(URL(), Новый Структура("Таймаут", ТаймаутОжидания));
|
||||
КодСостояния = Ответ.КодСостояния;
|
||||
Исключение
|
||||
ТекстИсключения = СокрП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||||
ТекстИсключения = СтрПолучитьСтроку(ТекстИсключения, СтрЧислоСтрок(ТекстИсключения));
|
||||
КонецПопытки;
|
||||
|
||||
Если КодСостояния = КодыСостоянияHTTP.ОК_200 Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
ПрошлоСекунд = ТекущаяУниверсальнаяДата() - ВремяНачала;
|
||||
Если ПрошлоСекунд > ТаймаутОжидания Или ЗначениеЗаполнено(КодСостояния) Тогда
|
||||
|
||||
ТекстОшибки = СтрШаблон(
|
||||
"Не удалось запустить веб-сервер в течение %1 сек.",
|
||||
ТаймаутОжидания);
|
||||
|
||||
Если ЗначениеЗаполнено(КодСостояния) Тогда
|
||||
ТекстОшибки = СтрШаблон("%1:
|
||||
|%2", ТекстОшибки, КодыСостоянияHTTP.Представление(КодСостояния));
|
||||
Иначе
|
||||
ТекстОшибки = СтрШаблон("%1:
|
||||
|%2", ТекстОшибки, ТекстИсключения);
|
||||
КонецЕсли;
|
||||
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Приостановить(ЗадержкаМеждуПопытками);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция URL()
|
||||
Возврат "http://127.0.0.1:3333";
|
||||
КонецФункции
|
||||
Reference in New Issue
Block a user