Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка опций -L, --location, --no-location, --retry, --retry-max-time для коннектора #147

Merged
merged 2 commits into from
Jan 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,12 @@
|json
|A
|user-agent
|oauth2-bearer";
|oauth2-bearer
|L
|location
|no-location
|retry
|retry-max-time";

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

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

Expand Down Expand Up @@ -632,6 +639,31 @@

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

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

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

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

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

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

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

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

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

ПрочитатьИспользованиеПеренаправлений(Команда);
ПрочитатьПовторныеПопытки(Команда);

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

КонецПроцедуры
Expand Down Expand Up @@ -752,6 +754,28 @@

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

Процедура ПрочитатьИспользованиеПеренаправлений(Команда)

ОписаниеЗапроса.РазрешитьПеренаправление = ПоследнееЗначениеОпции(Команда, "location") = Истина;
ОписаниеЗапроса.ЗапретитьПеренаправление = ПоследнееЗначениеОпции(Команда, "no-location") = Истина;

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

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

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

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

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

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

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

// Неподдерживаемые
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("abstract-unix-socket").ТМассивСтрок();
Expand Down Expand Up @@ -896,7 +924,6 @@
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("libcurl").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("limit-rate").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("local-port").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("L location").ТМассивБулево();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("location-trusted").ТМассивБулево();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("login-options").ТМассивСтрок();
ДобавитьНеподдерживаемуюОпциюВКонсольноеПриложение("mail-auth").ТМассивСтрок();
Expand Down Expand Up @@ -974,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 Expand Up @@ -1227,7 +1252,7 @@
Результат = Результат
+ ?(НомерКоманды > 1, Символы.ПС + Символы.ПС, "")
+ СтрШаблон(
"//////////////////////////////////////////////
"//////////////////////////////////////////////
|// Команда #%1.", НомерКоманды);

КонецПроцедуры
Expand Down
8 changes: 8 additions & 0 deletions src/internal/Классы/ОписаниеЗапроса.os
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
Перем ТипАутентификацииПрокси Экспорт; // см. ТипыАутентификацииПрокси
Перем FTPПассивныйРежимСоединения Экспорт; // Булево
Перем FTPАдресОбратногоСоединения Экспорт; // Строка
Перем РазрешитьПеренаправление Экспорт; // Булево
Перем ЗапретитьПеренаправление Экспорт; // Булево
Перем МаксимальноеКоличествоПовторов Экспорт; // Число
Перем МаксимальноеВремяПовторов Экспорт; // Число

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

Функция ЕстьДанныеПоНазначению(Назначение) Экспорт
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -531,15 +531,15 @@
|curl http://example1.com --head
|curl http://example2.com -X HEAD";

ПрограммныйКод = "//////////////////////////////////////////////
ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Соединение = Новый HTTPСоединение(""example1.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""HEAD"", HTTPЗапрос);
|
|//////////////////////////////////////////////
|//////////////////////////////////////////////
|// Команда #2.
|
|Соединение = Новый HTTPСоединение(""example2.com"", 80);
Expand All @@ -558,15 +558,15 @@

КонсольнаяКоманда = "curl http://example1.com & curl http://example2.com";

ПрограммныйКод = "//////////////////////////////////////////////
ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Соединение = Новый HTTPСоединение(""example1.com"", 80);
|HTTPЗапрос = Новый HTTPЗапрос(""/"");
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);
|
|//////////////////////////////////////////////
|//////////////////////////////////////////////
|// Команда #2.
|
|Соединение = Новый HTTPСоединение(""example2.com"", 80);
Expand Down Expand Up @@ -1299,7 +1299,7 @@
|curl http://example2.com -d 'key=value'
|curl http://example3.com";

ПрограммныйКод = "//////////////////////////////////////////////
ПрограммныйКод = "//////////////////////////////////////////////
|// Команда #1.
|
|Заголовки = Новый Соответствие();
Expand All @@ -1310,7 +1310,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""GET"", HTTPЗапрос);
|
|//////////////////////////////////////////////
|//////////////////////////////////////////////
|// Команда #2.
|
|Заголовки = Новый Соответствие();
Expand All @@ -1322,7 +1322,7 @@
|
|HTTPОтвет = Соединение.ВызватьHTTPМетод(""POST"", HTTPЗапрос);
|
|//////////////////////////////////////////////
|//////////////////////////////////////////////
|// Команда #3.
|
|Соединение = Новый HTTPСоединение(""example3.com"", 80);
Expand Down
Loading
Loading