Skip to content

Commit

Permalink
feat: Поддержка перенаправлений --retry и --retry-max-time для коннек…
Browse files Browse the repository at this point in the history
…тора
  • Loading branch information
Stivo182 committed Jan 19, 2025
1 parent 6154e9d commit aea8ecc
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,9 @@
|oauth2-bearer
|L
|location
|no-location";
|no-location
|retry
|retry-max-time";

Возврат СтрРазделить(ПоддерживаемыеОпции, Символы.ПС, Ложь);

Expand Down Expand Up @@ -520,6 +522,7 @@
ДобавитьСертификатыВДополнительныеПараметры(КонструкторДопПараметров);
ДобавитьТаймаутВДополнительныеПараметры(КонструкторДопПараметров);
ДобавитьРазрешениеПеренаправленийВДополнительныеПараметры(КонструкторДопПараметров);
ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров);
ДобавитьПараметрыЗапросаВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса);
ДобавитьДанныеВДополнительныеПараметры(КонструкторДопПараметров, ОписаниеРесурса, ДанныеЗапроса);

Expand Down Expand Up @@ -645,6 +648,22 @@

КонецПроцедуры

Процедура ДобавитьПовторныеПопыткиВДополнительныеПараметры(КонструкторДопПараметров)

Если ОписаниеЗапроса.МаксимальноеКоличествоПовторов > 0 Тогда
КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""МаксимальноеКоличествоПовторов"", %2);",
ИмяПараметраДополнительныеПараметры,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеКоличествоПовторов));
КонецЕсли;

Если ОписаниеЗапроса.МаксимальноеВремяПовторов > 0 Тогда
КонструкторДопПараметров.ДобавитьСтроку("%1.Вставить(""МаксимальноеВремяПовторов"", %2);",
ИмяПараметраДополнительныеПараметры,
Конструктор.ПараметрВСтроку(ОписаниеЗапроса.МаксимальноеВремяПовторов));
КонецЕсли;

КонецПроцедуры

Функция ВозможноПередатьДанныеЗапросаВПараметрыФункцииВызоваМетода(Метод)
Возврат Метод = "POST" Или Метод = "PUT" Или Метод = "PATCH" Или Метод = "DELETE";
КонецФункции
Expand Down
20 changes: 18 additions & 2 deletions src/core/Классы/КонвертерКомандыCURL.os
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@
ПрочитатьТаймаутСоединения(Команда);
ПрочитатьРежимСоединенияFTP(Команда);
ПрочитатьИспользованиеПеренаправлений(Команда);
ПрочитатьПовторныеПопытки(Команда);

ДополнитьОшибкиНеподдерживаемыеОпции(Команда);

Expand Down Expand Up @@ -760,6 +761,21 @@

КонецПроцедуры

Процедура ПрочитатьПовторныеПопытки(Команда)

МаксимальноеКоличествоПовторов = ПоследнееЗначениеОпции(Команда, "retry");
МаксимальноеВремяПовторов = ПоследнееЗначениеОпции(Команда, "retry-max-time");

Если Не МаксимальноеКоличествоПовторов = Неопределено Тогда
ОписаниеЗапроса.МаксимальноеКоличествоПовторов = МаксимальноеКоличествоПовторов;
КонецЕсли;

Если Не МаксимальноеВремяПовторов = Неопределено Тогда
ОписаниеЗапроса.МаксимальноеВремяПовторов = МаксимальноеВремяПовторов;
КонецЕсли;

КонецПроцедуры

Функция НазначениеПередаваемыхДанных(Команда)
Если ЗначениеОпции(Команда, "get") = Истина Тогда
Возврат НазначенияПередаваемыхДанных.СтрокаЗапроса;
Expand Down Expand Up @@ -814,6 +830,8 @@
ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("l list-only").ТМассивБулево();
ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("L location", "", "Разрешает перенаправления").ТМассивБулево();
ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("no-location", "", "Запрещает перенаправления").ТМассивБулево();
ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry", 0, "Количество повторных попыток").ТМассивЧисел();
ДобавитьПоддерживаемуюОпциюВКонсольноеПриложение("retry-max-time", 0, "Максимальное время повторов").ТМассивЧисел();

// Неподдерживаемые
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("abstract-unix-socket").ТМассивСтрок();
Expand Down Expand Up @@ -983,11 +1001,9 @@
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("remove-on-error").ТМассивБулево();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("request-target").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("resolve").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-all-errors").ТМассивБулево();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-connrefused").ТМассивБулево();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-delay").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("retry-max-time").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("sasl-authzid").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("sasl-ir").ТМассивБулево();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("service-name").ТМассивСтрок();
Expand Down
4 changes: 4 additions & 0 deletions src/internal/Классы/ОписаниеЗапроса.os
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
Перем FTPАдресОбратногоСоединения Экспорт; // Строка
Перем РазрешитьПеренаправление Экспорт; // Булево
Перем ЗапретитьПеренаправление Экспорт; // Булево
Перем МаксимальноеКоличествоПовторов Экспорт; // Число
Перем МаксимальноеВремяПовторов Экспорт; // Число

// Максимальное время ожидания на выполнение запроса
Перем Таймаут Экспорт; // Число
Expand Down Expand Up @@ -96,6 +98,8 @@
FTPАдресОбратногоСоединения = "";
РазрешитьПеренаправление = Ложь;
ЗапретитьПеренаправление = Ложь;
МаксимальноеКоличествоПовторов = 0;
МаксимальноеВремяПовторов = 0;
КонецПроцедуры

Функция ЕстьДанныеПоНазначению(Назначение) Экспорт
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -994,4 +994,57 @@

Ожидаем.Что(Результат).Равно(ПрограммныйКод);

КонецПроцедуры

&Тест
Процедура ТестДолжен_ПроверитьПроверитьПовторныеПопытки() Экспорт

КонсольнаяКоманда = "curl http://example.com/ --retry 5
|curl http://example.com/ --retry 0
|curl http://example.com/ --retry 5 --retry-max-time 0
|curl http://example.com/ --retry 5 --retry-max-time 30
|curl http://example.com/ --retry-max-time 30";

ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|ДополнительныеПараметры = Новый Структура();
|ДополнительныеПараметры.Вставить(""МаксимальноеКоличествоПовторов"", 5);
|
|Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);
|
|//////////////////////////////////////////////
|// Команда #2.
|
|Результат = КоннекторHTTP.Get(""http://example.com"");
|
|//////////////////////////////////////////////
|// Команда #3.
|
|ДополнительныеПараметры = Новый Структура();
|ДополнительныеПараметры.Вставить(""МаксимальноеКоличествоПовторов"", 5);
|
|Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);
|
|//////////////////////////////////////////////
|// Команда #4.
|
|ДополнительныеПараметры = Новый Структура();
|ДополнительныеПараметры.Вставить(""МаксимальноеКоличествоПовторов"", 5);
|ДополнительныеПараметры.Вставить(""МаксимальноеВремяПовторов"", 30);
|
|Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);
|
|//////////////////////////////////////////////
|// Команда #5.
|
|ДополнительныеПараметры = Новый Структура();
|ДополнительныеПараметры.Вставить(""МаксимальноеВремяПовторов"", 30);
|
|Результат = КоннекторHTTP.Get(""http://example.com"", , ДополнительныеПараметры);";

Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Генератор);

Ожидаем.Что(Результат).Равно(ПрограммныйКод);

КонецПроцедуры

0 comments on commit aea8ecc

Please sign in to comment.