From bc9c430dcca768272e23006dd262be754f9e7d88 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Thu, 18 May 2023 14:35:32 +0300 Subject: [PATCH 01/20] =?UTF-8?q?docs:=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=B0=20API?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Module.bsl" | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" index e3065a6..915e396 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ПрограммныйИнтерфейс @@ -15,6 +15,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция Получить(Знач ИдентификаторРесурса, Знач ПараметрыЗапроса = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт Возврат ВыполненныйЗапросHTTP( @@ -36,6 +37,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ПолучитьЗаголовки(Знач ИдентификаторРесурса, Знач ПараметрыЗапроса = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт Возврат ВыполненныйЗапросHTTP( @@ -58,6 +60,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ОтправитьДвоичныеДанные(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Конфигурация = КонфигурацияЗапроса(ИдентификаторРесурса, ПараметрыЗапроса, ДополнительныеПараметры); @@ -81,6 +84,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ЗаписатьДвоичныеДанные(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Конфигурация = КонфигурацияЗапроса(ИдентификаторРесурса, ПараметрыЗапроса, ДополнительныеПараметры); @@ -104,6 +108,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ИзменитьДвоичныеДанные(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Конфигурация = КонфигурацияЗапроса(ИдентификаторРесурса, ПараметрыЗапроса, ДополнительныеПараметры); @@ -127,6 +132,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция Удалить(Знач ИдентификаторРесурса, Знач Данные = "", ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Конфигурация = КонфигурацияЗапроса(ИдентификаторРесурса, ПараметрыЗапроса, ДополнительныеПараметры); @@ -154,6 +160,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ОтправитьТекст(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -189,6 +196,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ОтправитьФайл(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -223,6 +231,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ОтправитьДанныеHTMLФормы(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт #Если Клиент Тогда @@ -253,6 +262,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ОтправитьДанныеФормы(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт #Если Клиент Тогда @@ -276,6 +286,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ЗаписатьТекст(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -311,6 +322,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ЗаписатьФайл(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -343,6 +355,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ИзменитьТекст(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда @@ -378,6 +391,7 @@ // * Заголовки - Соответствие - HTTP-заголовки ответа сервера в виде соответствия "Название заголовка" - "Значение", // * Тело - ДвоичныеДанные, Строка, Структура, Соответствие, ОбъектXDTO, ЗначениеXDTO, Неопределено - данные тела HTTP-ответа, // * ИмяФайлаТела - Строка, Неопределено - имя файла, в который было записано тело ответа +// * КонтекстВыполнения - Структура - служебный набор значений процесса выполнения запроса // Функция ИзменитьФайл(Знач ИдентификаторРесурса, Знач Данные, ДополнительныеПараметры = Неопределено, Знач ПараметрыЗапроса = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда From d3fa8d6cd67bbc7fe701783ede6baa3948bfabe5 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Thu, 18 May 2023 14:37:31 +0300 Subject: [PATCH 02/20] =?UTF-8?q?feat:=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0=201=D0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Для пользовательского агента и требования GET редиректов. --- .../Ext/Form/Module.bsl" | 114 +++++++++++------- 1 file changed, 71 insertions(+), 43 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 428093d..3160d59 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -1841,43 +1841,54 @@ &НаКлиенте Процедура ДобавитьВКодЗапросаИспользованиеПрокси(Построитель, ЕстьДополнительныеПараметры) - Если ИспользоватьПрокси Тогда - Хвост = ?(НеИспользоватьПроксиДляЛокальныхАдресов, "", ", , Ложь"); - Хвост = ?( - ИспользоватьАутентификациюОСПрокси, - ?(ПустаяСтрока(Хвост), "", ", "), - ", Ложь" - ) + Хвост; - Хвост = ?( - ПустаяСтрока(ПарольПрокси), - ?(ПустаяСтрока(Хвост), "", ", "), - ", """ + КавычкиВТексте1С(ПарольПрокси) + """" - ) + Хвост; - Хвост = ?( - ПустаяСтрока(ПользовательПрокси), - ?(ПустаяСтрока(Хвост), "", ", "), - ", """ + КавычкиВТексте1С(ПользовательПрокси) + """" - ) + Хвост; - - Построитель.Добавить(СтрШаблон( - " .ИспользоватьПрокси(ДополнительныеПараметры, ""%1"", %2%3)", - СерверПрокси, - XMLСтрока(ПортПрокси), - Хвост - )); - - ЕстьДополнительныеПараметры = Истина; + Если НЕ ИспользоватьПрокси Тогда + Возврат; КонецЕсли; + + Хвост = ?(НеИспользоватьПроксиДляЛокальныхАдресов, "", ", , Ложь"); + Хвост = ?( + ИспользоватьАутентификациюОСПрокси, + ?(ПустаяСтрока(Хвост), "", ", "), + ", Ложь" + ) + Хвост; + Хвост = ?( + ПустаяСтрока(ПарольПрокси), + ?(ПустаяСтрока(Хвост), "", ", "), + ", """ + КавычкиВТексте1С(ПарольПрокси) + """" + ) + Хвост; + Хвост = ?( + ПустаяСтрока(ПользовательПрокси), + ?(ПустаяСтрока(Хвост), "", ", "), + ", """ + КавычкиВТексте1С(ПользовательПрокси) + """" + ) + Хвост; + + Построитель.Добавить(СтрШаблон( + " .ИспользоватьПрокси(ДополнительныеПараметры, ""%1"", %2%3)", + СерверПрокси, + XMLСтрока(ПортПрокси), + Хвост + )); + + ЕстьДополнительныеПараметры = Истина; КонецПроцедуры &НаКлиенте Процедура ДобавитьВКодЗапросаИспользованиеСессии(Построитель, ЕстьДополнительныеПараметры) - Если ИспользоватьСессию Тогда - Построитель.Добавить(" .ИспользоватьСессию(ДополнительныеПараметры)"); + Если НЕ ИспользоватьСессию Тогда + Возврат; + КонецЕсли; + + Построитель.Добавить(" .ИспользоватьСессию(ДополнительныеПараметры)"); + + Если ПорогПеренаправлений <> 10 Тогда Построитель.Добавить(СтрШаблон(" .УстановитьПорогПеренаправлений(ДополнительныеПараметры, %1)", ПорогПеренаправлений)); - - ЕстьДополнительныеПараметры = Истина; КонецЕсли; + + Если ПеренаправлениеКакGET Тогда + Построитель.Добавить(" .ПеренаправленияКакGET(ДополнительныеПараметры)"); + КонецЕсли; + + ЕстьДополнительныеПараметры = Истина; КонецПроцедуры &НаКлиенте @@ -1899,24 +1910,39 @@ &НаКлиенте Процедура ДобавитьВКодЗапросаЗаголовки(Построитель, ЕстьДополнительныеПараметры) + КлючАгент = НРег(КлиентHTTPПовтИсп.ЗаголовокАгентПользователя()); + ЗначениеАгент = АгентПользователя; + Для Каждого Стр Из ЗаголовкиЗапроса Цикл Если НЕ Стр.Активно Тогда Продолжить; КонецЕсли; - Построитель.Добавить(СтрШаблон(" .УстановитьЗаголовок(ДополнительныеПараметры, ""%1"", ""%2"")", Стр.Ключ, СтрЗаменить(Стр.Значение, """", """"""))); + Если НРег(Стр.Ключ) = КлючАгент Тогда + ЗначениеАгент = Стр.Значение; + Иначе + Построитель.Добавить(СтрШаблон(" .УстановитьЗаголовок(ДополнительныеПараметры, ""%1"", ""%2"")", Стр.Ключ, СтрЗаменить(Стр.Значение, """", """"""))); + КонецЕсли; ЕстьДополнительныеПараметры = Истина; КонецЦикла; + + Если НЕ ПустаяСтрока(ЗначениеАгент) Тогда + Построитель.Добавить(СтрШаблон(" .УстановитьАгентаПользователя(ДополнительныеПараметры, ""%1"")", ЗначениеАгент)); + + ЕстьДополнительныеПараметры = Истина; + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДобавитьВКодЗапросаСжатиеОтвета(Построитель, ЕстьДополнительныеПараметры) - Если ПоддержкаСжатогоОтвета Тогда - Построитель.Добавить(" .УстановитьСжатиеОтветаGZIP(ДополнительныеПараметры)"); - - ЕстьДополнительныеПараметры = Истина; + Если НЕ ПоддержкаСжатогоОтвета Тогда + Возврат; КонецЕсли; + + Построитель.Добавить(" .УстановитьСжатиеОтветаGZIP(ДополнительныеПараметры)"); + + ЕстьДополнительныеПараметры = Истина; КонецПроцедуры &НаКлиенте @@ -2007,15 +2033,17 @@ &НаКлиенте Процедура ДобавитьВКодЗапросаФайлТелаОтвета(Построитель, ЕстьДополнительныеПараметры, ТребуетсяИмяФайлаТелаОтвета) - Если ТелоОтветаВФайл Тогда - ЕстьДополнительныеПараметры = Истина; - ТребуетсяИмяФайлаТелаОтвета = ПустаяСтрока(ИмяФайлаТелаОтвета); - - Построитель.Добавить(СтрШаблон( - " .УстановитьИмяВыходногоФайла(ДополнительныеПараметры, %1)", - ?(ТребуетсяИмяФайлаТелаОтвета, "ИмяФайлаТелаОтвета", СтрШаблон("""%1""", ИмяФайлаТелаОтвета)) - )); + Если НЕ ТелоОтветаВФайл Тогда + Возврат; КонецЕсли; + + ЕстьДополнительныеПараметры = Истина; + ТребуетсяИмяФайлаТелаОтвета = ПустаяСтрока(ИмяФайлаТелаОтвета); + + Построитель.Добавить(СтрШаблон( + " .УстановитьИмяВыходногоФайла(ДополнительныеПараметры, %1)", + ?(ТребуетсяИмяФайлаТелаОтвета, "ИмяФайлаТелаОтвета", СтрШаблон("""%1""", ИмяФайлаТелаОтвета)) + )); КонецПроцедуры &НаКлиенте From ebd90e15e7023b39535a36202b52c5ba4e8617ac Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Thu, 18 May 2023 14:38:20 +0300 Subject: [PATCH 03/20] =?UTF-8?q?fix:=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=80=D0=B5=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Module.bsl" | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" index 915e396..647f17f 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ПрограммныйИнтерфейс @@ -1361,7 +1361,7 @@ // ОписаниеОшибки - Строка - описание ошибки валидации ответа // // Возвращаемое значение: -// Строка, Неопределено - значение charset заголовка Content-Type +// Булево - результат валидации ответа // Функция ОтветСЗаголовкомHawkКорректен(Знач Ответ, Знач ИмяЗаголовка, ОписаниеОшибки) Экспорт Если НЕ Ответ.КонтекстВыполнения.Свойство("АутентификацияHawk") Тогда @@ -1993,12 +1993,16 @@ Данные = Неопределено; Конфигурация.Заголовки.Удалить(КлиентHTTPПовтИсп.ЗаголовокРазмерКонтента()); + Конфигурация.Заголовки.Удалить(КлиентHTTPПовтИсп.ЗаголовокТипКонтента()); КонецЕсли; Конфигурация.ДанныеURI = СтруктураИдентификатораРесурса(НовыйИдентификаторРесурса); Конфигурация.Параметры = ОбъединениеПараметровЗапроса(Конфигурация.ДанныеURI.Параметры, НовыеПараметрыЗапроса()); Конфигурация.ПараметрыСтрокой = ПараметрыЗапросаСтрокой(Конфигурация.Параметры); + ДобавитьХостВЗаголовкиЗапроса(Конфигурация.Заголовки, Конфигурация.ДанныеURI); + ДобавитьДанныеСессииВЗаголовкиЗапроса(Конфигурация.Заголовки, Конфигурация.ДанныеURI, Конфигурация.ДополнительныеПараметры); + Возврат ВыполненныйЗапросHTTP(Метод, Конфигурация, Данные, КонтекстВыполнения.НомерПеренаправления + 1); КонецФункции From bc03ca7be8fcbcd7cdba2fef6e608f4be151248b Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Thu, 18 May 2023 15:06:18 +0300 Subject: [PATCH 04/20] =?UTF-8?q?fix:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=B3=D0=BE?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=B2=20=D1=81=D0=B3=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D0=B4=D0=B5=20cur?= =?UTF-8?q?l?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-Type для -F и -data-urlencode не нужен. --- .../Ext/Form/Module.bsl" | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 3160d59..2d65a7d 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -2601,7 +2601,7 @@ КонецПроцедуры &НаКлиенте -Процедура ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки) +Процедура ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST) Если ТелоЗапросаДанныеФормы.Количество() = 0 Тогда ОтобразитьPOST = Истина; Возврат; @@ -2610,14 +2610,10 @@ Для Каждого Стр Из ТелоЗапросаДанныеФормы Цикл ЗаполнитьПолеФормыCurlКоманды(ЧастиКоманды, Стр); КонецЦикла; - - ПредопределенныеЗаголовки.Добавить( - Новый Структура("Ключ, Значение", "Content-Type", "multipart/form-data; boundary=" + Разделитель) - ); КонецПроцедуры &НаКлиенте -Процедура ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки) +Процедура ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST) Если ТелоЗапросаДанныеHTMLФормы.Количество() = 0 Тогда ОтобразитьPOST = Истина; Возврат; @@ -2628,8 +2624,6 @@ ЧастиКоманды.Добавить("--data-urlencode"); ЧастиКоманды.Добавить(СтрШаблон("'%1=%2'", КодированныйТекстВURL(Стр.Ключ), ЭкранированиеАпострофаUnix(Стр.Значение))); КонецЦикла; - - ПредопределенныеЗаголовки.Добавить(Новый Структура("Ключ, Значение", "Content-Type", "application/x-www-form-urlencoded")); КонецПроцедуры &НаКлиенте @@ -2662,9 +2656,9 @@ &НаКлиенте Процедура ЗаполнитьТелоЗапросаCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки) Если ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[1].Значение Тогда // multipart/form-data - ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки); + ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST); ИначеЕсли ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[2].Значение Тогда // application/x-www-form-urlencoded - ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки); + ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST); ИначеЕсли ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[3].Значение Тогда // Текст ЗаполнитьТекстовыеДанныеCurlКоманды(ЧастиКоманды, ОтобразитьPOST); ИначеЕсли ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[4].Значение Тогда // Файл From f6eb7e07ff5f475b357fe1c78772091c2d110cbe Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Thu, 18 May 2023 15:08:10 +0300 Subject: [PATCH 05/20] . --- .../Ext/Form/Module.bsl" | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" index 079ad9c..6cdbe17 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" @@ -1549,7 +1549,7 @@ КонецПроцедуры &НаКлиенте -Процедура ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки) +Процедура ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST) Если ТелоЗапросаДанныеФормы.Количество() = 0 Тогда ОтобразитьPOST = Истина; Возврат; @@ -1558,14 +1558,10 @@ Для Каждого Стр Из ТелоЗапросаДанныеФормы Цикл ЗаполнитьПолеФормыCurlКоманды(ЧастиКоманды, Стр); КонецЦикла; - - ПредопределенныеЗаголовки.Добавить( - Новый Структура("Ключ, Значение", "Content-Type", "multipart/form-data; boundary=" + Разделитель) - ); КонецПроцедуры &НаКлиенте -Процедура ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки) +Процедура ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST) Если ТелоЗапросаДанныеHTMLФормы.Количество() = 0 Тогда ОтобразитьPOST = Истина; Возврат; @@ -1576,8 +1572,6 @@ ЧастиКоманды.Добавить("--data-urlencode"); ЧастиКоманды.Добавить(СтрШаблон("'%1=%2'", КодированныйТекстВURL(Стр.Ключ), ЭкранированиеАпострофаUnix(Стр.Значение))); КонецЦикла; - - ПредопределенныеЗаголовки.Добавить(Новый Структура("Ключ, Значение", "Content-Type", "application/x-www-form-urlencoded")); КонецПроцедуры &НаКлиенте @@ -1610,9 +1604,9 @@ &НаКлиенте Процедура ЗаполнитьТелоЗапросаCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки) Если ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[1].Значение Тогда // multipart/form-data - ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки); + ЗаполнитьДанныеФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST); ИначеЕсли ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[2].Значение Тогда // application/x-www-form-urlencoded - ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST, ПредопределенныеЗаголовки); + ЗаполнитьДанныеHTMLФормыCurlКоманды(ЧастиКоманды, ОтобразитьPOST); ИначеЕсли ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[3].Значение Тогда // Текст ЗаполнитьТекстовыеДанныеCurlКоманды(ЧастиКоманды, ОтобразитьPOST); ИначеЕсли ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[4].Значение Тогда // Файл From 0620bfedcdbca70a957848d39c5ca1478caef914 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 17:22:01 +0300 Subject: [PATCH 06/20] =?UTF-8?q?feat:=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=BF=D0=B0=D1=83=D0=B7=D1=8B=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20=D1=84=D0=BE=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Module.bsl" | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" index 48716ed..ae7b89f 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ПрограммныйИнтерфейс @@ -650,6 +650,31 @@ ); #КонецЕсли КонецПроцедуры + +// (СЛУЖЕБНЫЙ) Запуск паузы выполнения кода по ключу процесса +// Используется механика фоновых заданий. +// +// Параметры: +// Длительность - Число - длительность ожидания в секундах +// Ключ - Строка - ключ процесса, требующего паузу (используется как ключ фонового задания) +// +Процедура ПаузаПередПовторнымВыполнением(Знач Длительность, Знач Ключ) Экспорт + Перем ФЗ; + + ИмяМетода = "КлиентHTTP.ПаузаПередПовторнымВыполнением"; + ФЗя = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("ИмяМетода, Ключ, Состояние", ИмяМетода, Ключ, СостояниеФоновогоЗадания.Активно)); + Если ФЗя.Количество() = 0 Тогда + Параметры = Новый Массив; + Параметры.Добавить(Длительность); + Параметры.Добавить(Ключ); + + ФЗ = ФоновыеЗадания.Выполнить(ИмяМетода, Параметры, Ключ); + Иначе + ФЗ = ФЗя[0]; + КонецЕсли; + + ФЗ.ОжидатьЗавершенияВыполнения(Длительность); +КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции From 44cb66d6151e4b515272e1055e83cf512f8fe7c4 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 17:30:17 +0300 Subject: [PATCH 07/20] . --- .../Ext/Module.bsl" | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" index c054f15..57c99aa 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область СлужебныйПрограммныйИнтерфейс @@ -209,4 +209,15 @@ Функция ЗакодированныеПоляФормыHTML(Знач ПоляФормыHTML) Экспорт Возврат КлиентHTTP.ЗакодированныеПоляФормыHTML(ПоляФормыHTML); КонецФункции + +// Запуск паузы выполнения кода по ключу процесса +// Используется механика фоновых заданий. +// +// Параметры: +// Длительность - Число - длительность ожидания в секундах +// Ключ - Строка - ключ процесса, требующего паузу (используется как ключ фонового задания) +// +Процедура ПаузаПередПовторнымВыполнением(Знач Длительность, Знач Ключ) Экспорт + КлиентHTTP.ПаузаПередПовторнымВыполнением(Длительность, Ключ); +КонецПроцедуры #КонецОбласти From 79255ae3faa0a54ebf18ac2ccb5ee3f9870989e6 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 17:39:00 +0300 Subject: [PATCH 08/20] =?UTF-8?q?feat:=20API=20=D0=BF=D0=BE=D0=B2=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B2=D1=8B=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Изменена логика выполнения запроса и перенаправлений. --- .../Ext/Module.bsl" | 271 +++++++++++++++++- .../Ext/Module.bsl" | 41 +++ .../Ext/Module.bsl" | 6 +- 3 files changed, 313 insertions(+), 5 deletions(-) diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" index 647f17f..f4b698f 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ПрограммныйИнтерфейс @@ -1200,6 +1200,129 @@ Возврат КлиентHTTPКлиентСервер; КонецФункции + +// Отмена требования повторять попытки выполнить запрос после неуспешного результата +// Неуспешным считается вызов исключения и ответ с кодом состояния 5хх или каким-либо из определённых пользователем. +// ВНИМАНИЕ! Неуспешный HTTP-запрос вызывает исключение, что отменит цепочку транзаций, в которой выполнялся запрос. +// +// Параметры: +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// +// Возвращаемое значение: +// ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции +// +Функция РазовоеВыполнение(ДополнительныеПараметры) Экспорт + ДополнительныеПараметры.Удалить("ПовторноеВыполнение"); + + Возврат КлиентHTTPКлиентСервер; +КонецФункции + +// Требование повторять попытки выполнить запрос после неуспешного результата через фиксированный интервал времени +// Неуспешным считается вызов исключения и ответ с кодом состояния 5хх или каким-либо из определённых пользователем. +// +// Параметры: +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// Длительность - Число - длительность задержки между попытками в секундах +// ПорогКоличестваПопыток - Число - максимальное количество неуспешных попыток выполнить HTTP-запрос +// МаксимальнаяДлительность - Число - максимальная длительность паузы между попытками в секундах (ограничение фреймворка 3600) +// КодыСостояния - Массив - коды состояния ответа (Число), при получении которых необходимо повторять попытки +// +// Возвращаемое значение: +// ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции +// +Функция ФиксированоОтложенныеВыполнения(ДополнительныеПараметры, Знач Длительность = 1, Знач ПорогКоличестваПопыток = 9, Знач МаксимальнаяДлительность = 600, Знач КодыСостояния = Неопределено) Экспорт + МножествоКодов = Новый Соответствие; + Если КодыСостояния <> Неопределено Тогда + Для Каждого Код Из КодыСостояния Цикл + МножествоКодов.Вставить(Код, Истина); + КонецЦикла; + КонецЕсли; + + ДополнительныеПараметры.Вставить("ПовторноеВыполнение", Новый Структура( + "Способ, Длительность, МаксимальнаяДлительность, ПорогКоличестваПопыток, КодыСостояния, ОсталосьПопыток, Ключ", + СпособБезУвеличения(), + ?(Длительность < 0, 0, Длительность), + ?(МаксимальнаяДлительность < 0, 0, МаксимальнаяДлительность), + КорректныйПорогКоличестваПопыток(ПорогКоличестваПопыток), + МножествоКодов + )); + + Возврат КлиентHTTPКлиентСервер; +КонецФункции + +// Требование повторять попытки выполнить запрос после неуспешного результата через линейно увеличивающийся интервал времени +// Формула: НачальнаяДлительность + КоэфициентУвеличения * НачальнаяДлительность * (НомерПопытки - 1) +// Неуспешным считается вызов исключения и ответ с кодом состояния 5хх или каким-либо из определённых пользователем. +// ВНИМАНИЕ! Неуспешный HTTP-запрос вызывает исключение, что отменит цепочку транзаций, в которой выполнялся запрос. +// +// Параметры: +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// НачальнаяДлительность - Число - длительность паузы после первой попытки в секундах +// КоэфициентУвеличения - Число - коэффициент увеличения длительности пауз +// ПорогКоличестваПопыток - Число - максимальное количество неуспешных попыток выполнить HTTP-запрос +// МаксимальнаяДлительность - Число - максимальная длительность паузы между попытками в секундах (ограничение фреймворка 3600) +// КодыСостояния - Массив - коды состояния ответа (Число), при получении которых необходимо повторять попытки +// +// Возвращаемое значение: +// ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции +// +Функция ЛинейноОтложенныеВыполнения(ДополнительныеПараметры, Знач НачальнаяДлительность = 1, Знач КоэфициентУвеличения = 1, Знач ПорогКоличестваПопыток = 9, Знач МаксимальнаяДлительность = 600, Знач КодыСостояния = Неопределено) Экспорт + МножествоКодов = Новый Соответствие; + Если КодыСостояния <> Неопределено Тогда + Для Каждого Код Из КодыСостояния Цикл + МножествоКодов.Вставить(Код, Истина); + КонецЦикла; + КонецЕсли; + + ДополнительныеПараметры.Вставить("ПовторноеВыполнение", Новый Структура( + "Способ, НачальнаяДлительность, МаксимальнаяДлительность, КоэфициентУвеличения, ПорогКоличестваПопыток, КодыСостояния, ОсталосьПопыток, Ключ", + СпособУвеличенияЛинейно(), + ?(НачальнаяДлительность < 1, 1, НачальнаяДлительность), + ?(МаксимальнаяДлительность < 1, 1, МаксимальнаяДлительность), + ?(КоэфициентУвеличения < 0, 0, КоэфициентУвеличения), + КорректныйПорогКоличестваПопыток(ПорогКоличестваПопыток), + МножествоКодов + )); + + Возврат КлиентHTTPКлиентСервер; +КонецФункции + +// Требование повторять попытки выполнить запрос после неуспешного результата через экспоненциально увеличивающийся интервал времени +// Формула: НачальнаяДлительность * Pow(КоэфициентУвеличения, НомерПопытки - 1) +// Неуспешным считается вызов исключения и ответ с кодом состояния 5хх или каким-либо из определённых пользователем. +// ВНИМАНИЕ! Неуспешный HTTP-запрос вызывает исключение, что отменит цепочку транзаций, в которой выполнялся запрос. +// +// Параметры: +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// НачальнаяДлительность - Число - длительность паузы после первой попытки в секундах +// КоэфициентУвеличения - Число - коэффициент экспоненциального увеличения длительности пауз +// ПорогКоличестваПопыток - Число - максимальное количество неуспешных попыток выполнить HTTP-запрос +// МаксимальнаяДлительность - Число - максимальная длительность паузы между попытками в секундах (ограничение фреймворка 3600) +// КодыСостояния - Массив - коды состояния ответа (Число), при получении которых необходимо повторять попытки +// +// Возвращаемое значение: +// ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции +// +Функция ЭкспоненциальноОтложенныеВыполнения(ДополнительныеПараметры, Знач НачальнаяДлительность = 1, Знач КоэфициентУвеличения = 2, Знач ПорогКоличестваПопыток = 9, Знач МаксимальнаяДлительность = 3600, Знач КодыСостояния = Неопределено) Экспорт + МножествоКодов = Новый Соответствие; + Если КодыСостояния <> Неопределено Тогда + Для Каждого Код Из КодыСостояния Цикл + МножествоКодов.Вставить(Код, Истина); + КонецЦикла; + КонецЕсли; + + ДополнительныеПараметры.Вставить("ПовторноеВыполнение", Новый Структура( + "Способ, НачальнаяДлительность, МаксимальнаяДлительность, КоэфициентУвеличения, ПорогКоличестваПопыток, КодыСостояния, ОсталосьПопыток, Ключ", + СпособУвеличенияЭкспоненциально(), + ?(НачальнаяДлительность < 1, 1, НачальнаяДлительность), + ?(МаксимальнаяДлительность < 1, 1, МаксимальнаяДлительность), + ?(КоэфициентУвеличения < 1, 1, КоэфициентУвеличения), + КорректныйПорогКоличестваПопыток(ПорогКоличестваПопыток), + МножествоКодов + )); + + Возврат КлиентHTTPКлиентСервер; +КонецФункции #КонецОбласти // Возвращает строку параметров URL из коллекции @@ -1471,15 +1594,22 @@ Запрос.УстановитьТелоИзДвоичныхДанных(Данные); КонецЕсли; + Попытка + Ответ = Соединение.ВызватьHTTPМетод(Метод, Запрос, ИмяВыходногоФайлаИзДопПараметров(Конфигурация.ДополнительныеПараметры)); + Исключение + Контекст.Вставить("ИнформацияОбОшибке", ИнформацияОбОшибке()); + Ответ = Неопределено; + КонецПопытки; + Возврат ОбработанныйОтвет( - Соединение.ВызватьHTTPМетод(Метод, Запрос, ИмяВыходногоФайлаИзДопПараметров(Конфигурация.ДополнительныеПараметры)), + Ответ, Конфигурация, Контекст ); КонецФункции Функция КонтекстВыполнения(Знач Метод, Знач НомерПеренаправления, Знач Данные) - Возврат Новый ФиксированнаяСтруктура("Метод, НомерПеренаправления, Данные, Значения", Метод, НомерПеренаправления, Данные, Новый Структура); + Возврат Новый Структура("Метод, НомерПеренаправления, Данные, Значения", Метод, НомерПеренаправления, Данные, Новый Структура); КонецФункции Функция КонфигурацияЗапроса(Знач ИдентификаторРесурса, Знач ПараметрыЗапроса = Неопределено, ДополнительныеПараметры = Неопределено) @@ -1495,6 +1625,8 @@ ПараметрыСтрокой = ПараметрыЗапросаСтрокой(Параметры); Заголовки = ЗаголовкиЗапроса(ДанныеURI, ДополнительныеПараметры); + СброситьСостояниеПовторногоВыполнения(ДополнительныеПараметры); + Возврат Новый Структура("ДанныеURI, Параметры, ПараметрыСтрокой, Заголовки, ДополнительныеПараметры", ДанныеURI, Параметры, ПараметрыСтрокой, Заголовки, ДополнительныеПараметры); КонецФункции @@ -2002,11 +2134,43 @@ ДобавитьХостВЗаголовкиЗапроса(Конфигурация.Заголовки, Конфигурация.ДанныеURI); ДобавитьДанныеСессииВЗаголовкиЗапроса(Конфигурация.Заголовки, Конфигурация.ДанныеURI, Конфигурация.ДополнительныеПараметры); + СброситьСостояниеПовторногоВыполнения(Конфигурация.ДополнительныеПараметры); + ВыполнитьПаузуПередРедиректомПриНеобходимости(Ответ); Возврат ВыполненныйЗапросHTTP(Метод, Конфигурация, Данные, КонтекстВыполнения.НомерПеренаправления + 1); КонецФункции +Функция ОтложеноВыполненныйЗапросHTTP(Знач Ответ, Конфигурация, Знач КонтекстВыполнения) + Перем ПовторноеВыполнение; + + Конфигурация.ДополнительныеПараметры.Свойство("ПовторноеВыполнение", ПовторноеВыполнение); + + Если Ответ = Неопределено И ПовторноеВыполнение = Неопределено Тогда + ВызватьИсключение ?( + КонтекстВыполнения.Свойство("ИнформацияОбОшибке"), + ОбработкаОшибок.КраткоеПредставлениеОшибки(КонтекстВыполнения.ИнформацияОбОшибке), + "Превышено количетво попыток выполнения запроса" + ); + КонецЕсли; + + ПовторноеВыполнение.ОсталосьПопыток = ПовторноеВыполнение.ОсталосьПопыток - 1; + Если ПовторноеВыполнение.ОсталосьПопыток < 1 Тогда + ВызватьИсключение "Превышено количетво попыток выполнения запроса"; + КонецЕсли; + + ДлительностьПаузы = ДлительностьПаузыОтложеногоВыполнения(ПовторноеВыполнение, Ответ); + Если ДлительностьПаузы >= 1 Тогда + КлиентHTTPВызовСервера.ПаузаПередПовторнымВыполнением(ДлительностьПаузы, ПовторноеВыполнение.Ключ); + КонецЕсли; + + Возврат ВыполненныйЗапросHTTP(КонтекстВыполнения.Метод, Конфигурация, КонтекстВыполнения.Данные, КонтекстВыполнения.НомерПеренаправления); +КонецФункции + Функция ОбработанныйОтвет(Знач Ответ, Знач Конфигурация, Знач КонтекстВыполнения) + Если ТребуетсяПовторноеВыполнение(Ответ, Конфигурация.ДополнительныеПараметры) Тогда + Возврат ОтложеноВыполненныйЗапросHTTP(Ответ, Конфигурация, КонтекстВыполнения); + КонецЕсли; + Если НЕ Конфигурация.ДополнительныеПараметры.Свойство("Сессия") Тогда Возврат ОбъектОбработанногоОтвета(Ответ, Конфигурация.ДополнительныеПараметры, КонтекстВыполнения); КонецЕсли; @@ -2033,6 +2197,8 @@ Если Ответ.КодСостояния = КлиентHTTPПовтИсп.КодСостоянияНеАвторизовано() И Конфигурация.ДополнительныеПараметры.Свойство("АвторизоватьсяDigest") Тогда РецептАвторизации = ЗначениеЗаголовка(КлиентHTTPПовтИсп.ЗаголовокОтветаМетодыАутентификации(), Ответ.Заголовки); Если СтрНачинаетсяС(НРег(РецептАвторизации), "digest") Тогда + СброситьСостояниеПовторногоВыполнения(Конфигурация.ДополнительныеПараметры); + КонтекстВыполненияАдресВХ = ПоместитьВоВременноеХранилище(КонтекстВыполнения, Новый УникальныйИдентификатор); Конфигурация.ДополнительныеПараметры.Удалить("АвторизоватьсяDigest"); @@ -2242,6 +2408,93 @@ Возврат Новый Структура("Формат, Параметры", Формат, Параметры); КонецФункции +Функция ТребуетсяПовторноеВыполнение(Знач Ответ, Знач ДополнительныеПараметры) + Если Ответ = Неопределено Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ДополнительныеПараметры.Свойство("ПовторноеВыполнение") Тогда + Возврат Ложь; + КонецЕсли; + + Возврат Ответ.КодСостояния >= КлиентHTTPПовтИсп.КодСостоянияВнутренняяОшибкаСервера() + ИЛИ ДополнительныеПараметры.ПовторноеВыполнение.КодыСостояния.Получить(Ответ.КодСостояния) <> Неопределено; +КонецФункции + +Функция НовыйКлючПовторногоВыполнения() + Возврат "http_client_retry_" + XMLСтрока(Новый УникальныйИдентификатор); +КонецФункции + +Процедура СброситьСостояниеПовторногоВыполнения(ДополнительныеПараметры) + Если НЕ ДополнительныеПараметры.Свойство("ПовторноеВыполнение") Тогда + Возврат; + КонецЕсли; + + ПВ = ДополнительныеПараметры.ПовторноеВыполнение; + ПВ.Ключ = НовыйКлючПовторногоВыполнения(); + ПВ.ОсталосьПопыток = ПВ.ПорогКоличестваПопыток; +КонецПроцедуры + +Функция ДлительностьПаузыОтложеногоВыполнения(Знач Параметры, Знач Ответ) + ЗаголовокПовторитьПосле = ?( + Ответ = Неопределено ИЛИ КлиентHTTPПовтИсп.КодыСостоянияЧтенияЗаголовкаОтложенногоВыполнения().Получить(Ответ.КодСостояния) = Неопределено, + Неопределено, + ЗначениеЗаголовка(КлиентHTTPПовтИсп.ЗаголовокОтветаПовторитьПосле(), Ответ.Заголовки) + ); + Если ЗаголовокПовторитьПосле <> Неопределено Тогда + Возврат ДлительностьПаузыЗаголовкаОтвета(ЗаголовокПовторитьПосле); + КонецЕсли; + + НомерПопытки = Параметры.ПорогКоличестваПопыток - Параметры.ОсталосьПопыток; + фРезультат = 0; + + Если Параметры.Способ = СпособУвеличенияЛинейно() Тогда + фРезультат = Параметры.НачальнаяДлительность + Параметры.КоэфициентУвеличения * Параметры.НачальнаяДлительность * (НомерПопытки - 1); + ИначеЕсли Параметры.Способ = СпособБезУвеличения() Тогда + фРезультат = Параметры.Длительность; + ИначеЕсли Параметры.Способ = СпособУвеличенияЭкспоненциально() Тогда + фРезультат = Параметры.НачальнаяДлительность * Pow(Параметры.КоэфициентУвеличения, НомерПопытки - 1); + КонецЕсли; + + Возврат КорректнаяДлительностьПаузы(Мин(Параметры.МаксимальнаяДлительность, фРезультат)); +КонецФункции + +Функция ДлительностьПаузыЗаголовкаОтвета(Знач ЗначениеЗаголовка) + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + Ошибка = Ложь; + ДатаЗаголовка = КлиентHTTPСлужебный.ДатаИзHTTP(ЗначениеЗаголовка, Ошибка); + + Возврат КорректнаяДлительностьПаузы(?( + Ошибка, + ОписаниеТипаЧисло.ПривестиЗначение(ДатаЗаголовка), + Мин(0, Макс(0, ДатаЗаголовка - КлиентHTTPВызовСервера.ТекущаяУниверсальнаяДатаНаСервере())) + )); +КонецФункции + +Функция КорректныйПорогКоличестваПопыток(Знач ПорогКоличестваПопыток) + Возврат ?(ПорогКоличестваПопыток < 1, 1, Мин(99, ПорогКоличестваПопыток)); +КонецФункции + +Функция КорректнаяДлительностьПаузы(Знач Длительность) + Возврат ?(Длительность < 0, 0, Мин(КлиентHTTPПовтИсп.МаксимальноДопустимаяДлительностьПаузы(), Цел(Длительность))); +КонецФункции + +Процедура ВыполнитьПаузуПередРедиректомПриНеобходимости(Знач Ответ) + Если Ответ.КодСостояния <> КлиентHTTPПовтИсп.КодСостоянияПеремещен() Тогда + Возврат; + КонецЕсли; + + ЗаголовокПовторитьПосле = ЗначениеЗаголовка(КлиентHTTPПовтИсп.ЗаголовокОтветаПовторитьПосле(), Ответ.Заголовки); + Если ЗаголовокПовторитьПосле = Неопределено Тогда + Возврат; + КонецЕсли; + + ДлительностьПаузы = ДлительностьПаузыЗаголовкаОтвета(ЗаголовокПовторитьПосле); + Если ДлительностьПаузы > 0 Тогда + КлиентHTTPВызовСервера.ПаузаПередПовторнымВыполнением(ДлительностьПаузы, НовыйКлючПовторногоВыполнения()); + КонецЕсли; +КонецПроцедуры + Функция ПараметрыЧтенияJSON( Знач ПрочитатьВСоответствие = Ложь, Знач ИменаСвойствСоЗначениямиДата = Неопределено, @@ -2340,4 +2593,16 @@ Функция ФорматТелаОтветаXML() Возврат "xml"; КонецФункции + +Функция СпособБезУвеличения() + Возврат "Фиксировано"; +КонецФункции + +Функция СпособУвеличенияЛинейно() + Возврат "Линейно"; +КонецФункции + +Функция СпособУвеличенияЭкспоненциально() + Возврат "Экспоненциально"; +КонецФункции #КонецОбласти diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" index 9f89db7..a251459 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" @@ -308,6 +308,15 @@ Возврат КлиентHTTPПовтИсп.КодыСостояния().Клиентские.Чайник; КонецФункции +// Возвращает код состояния HTTP-сервера 429 +// +// Возвращаемое значение: +// Число - код состояния +// +Функция КодСостоянияСлишкомМногоЗапросов() Экспорт + Возврат КлиентHTTPПовтИсп.КодыСостояния().Клиентские.СлишкомМногоЗапросов; +КонецФункции + // Возвращает код состояния HTTP-сервера 500 // // Возвращаемое значение: @@ -370,6 +379,20 @@ Возврат Новый ФиксированноеСоответствие(фРезультат); КонецФункции +// Возвращает множество кодов состояния HTTP-сервера, требующих чтения заголовка ответа Retry-After +// +// Возвращаемое значение: +// ФиксированноеСоответствие - ключи: коды состояния +// +Функция КодыСостоянияЧтенияЗаголовкаОтложенногоВыполнения() Экспорт + фРезультат = Новый Соответствие; + фРезультат.Вставить(КлиентHTTPПовтИсп.КодСостоянияСервисНедоступен(), Истина); + фРезультат.Вставить(КлиентHTTPПовтИсп.КодСостоянияСлишкомМногоЗапросов(), Истина); + фРезультат.Вставить(КлиентHTTPПовтИсп.КодСостоянияПеремещен(), Истина); + + Возврат Новый ФиксированноеСоответствие(фРезультат); +КонецФункции + // Возвращает адресный перечень MIME-типов // // Возвращаемое значение: @@ -928,6 +951,15 @@ Возврат "WWW-Authenticate"; КонецФункции +// Возвращает имя заголовка ответа с датой повторного выполнения или длительностью паузы до повторного выполнения +// +// Возвращаемое значение: +// Строка - имя заголовка +// +Функция ЗаголовокОтветаПовторитьПосле() Экспорт + Возврат "Retry-After"; +КонецФункции + // Возвращает дату, называемую эпохой Unix // // Возвращаемое значение: @@ -1400,6 +1432,15 @@ Возврат Новый ФиксированноеСоответствие(фРезультат); КонецФункции +// Возвращает максимально допустимую для фреймворка длительность паузы в секундах +// +// Возвращаемое значение: +// Число - количество секунд +// +Функция МаксимальноДопустимаяДлительностьПаузы() Экспорт + Возврат 3600; +КонецФункции + // Возвращает имя события для журнала регистрации // // Возвращаемое значение: diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271/Ext/Module.bsl" index 6f5cfc8..c828108 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271/Ext/Module.bsl" @@ -16,9 +16,7 @@ Возврат ПолучитьДвоичныеДанныеИзСтроки(Текст, Кодировка).Размер(); КонецФункции -#КонецОбласти -#Область СлужебныйПрограммныйИнтерфейс // Возвращает строку Basic-аутентификации для пользователя и пароля // // Параметры: @@ -78,6 +76,10 @@ КонецЦикла; ЧастиДатыHTTP = СтрРазделить(ДатаHTTP, " "); + Если ЧастиДатыHTTP.Количество() < 7 Тогда + Ошибка = Истина; + Возврат фРезультат; + КонецЕсли; Год = ОписаниеТипаЧисло.ПривестиЗначение(ЧастиДатыHTTP[3]); Если Год < 70 Тогда From b9c567cfdb100652b080f85b9c1a1fbf5c7eb6dc Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 17:43:10 +0300 Subject: [PATCH 09/20] =?UTF-8?q?feat:=20=D0=BF=D0=BE=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BD=D0=BE=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=9A=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D0=BE=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Form.xml" | 354 +++++++++++++++++- .../Ext/Form/Module.bsl" | 91 ++++- 2 files changed, 443 insertions(+), 2 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" index b3228f5..987b19e 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -1,4 +1,4 @@ - +
<v8:item> @@ -2771,6 +2771,256 @@ </UsualGroup> </ChildItems> </UsualGroup> + <UsualGroup name="ГруппаПовторноеВыполнение" id="513"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Повторное выполнение</v8:content> + </v8:item> + + + + ru + Повторять попытки выполнить HTTP-запрос после неуспешного результата. + +Неуспешным считается вызов исключения и ответ с кодом состояния 5хх или каким-либо из определённых пользователем. + + + Button + Vertical + Usual + + + + СпособПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ</v8:content> + </v8:item> + + + + ru + Способ расчёта паузы перед повторным выполнением + + + Button + true + false + false + false + false + false + true + false + + + + 0 + + + + ru + Разово + + + Разово + + + + + 0 + + + + ru + Фиксировано + + + Фиксировано + + + + + 0 + + + + ru + Линейно + + + Линейно + + + + + 0 + + + + ru + Экспоненциально + + + Экспоненциально + + + + + + + СпособПовторногоВыполненияПриИзменении + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа параметры повторного выполнения</v8:content> + </v8:item> + + + + ru + Группа параметры повторного выполнения + + + Vertical + Usual + None + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа параметры длительности паузы</v8:content> + </v8:item> + + + + ru + Группа параметры длительности паузы + + + AlwaysHorizontal + Usual + None + false + + + + ДлительностьПаузыПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительность</v8:content> + </v8:item> + + + + ru + Длительность в секундах паузы после первой попытки выполнения HTTP-запроса + + + Button + + + + + МаксимальнаяДлительностьПаузыПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в пределе до</v8:content> + </v8:item> + + + + ru + Максимальная длительность в секундах паузы между попытками в секундах (ограничение фреймворка 3600) + + + Button + + + + + КоэффициентУвеличенияПаузыПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент</v8:content> + </v8:item> + + + + ru + Коэффициент увеличения паузы между попытками выполнить HTTP-запрос + + + Button + + + + + ПорогКоличестваПопытокПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество попыток</v8:content> + </v8:item> + + + + ru + Максимальное количество неуспешных попыток выполнить HTTP-запрос + + + Button + 1 + + + + + + + КодыСостоянияОтветаПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коды состояния ответа</v8:content> + </v8:item> + + + + ru + коды состояния ответа, при получении которых необходимо повторять попытки + + + Button + false + false + false + true + true + false + false + false + 999 + 100 + 599 + + + + + + + <v8:item> @@ -4478,6 +4728,108 @@ </v8:StringQualifiers> </Type> </Attribute> + <Attribute name="СпособПовторногоВыполнения" id="62"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ повторного выполнения</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительность паузы повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 4 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент увеличения паузы повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 4 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Порог количества попыток повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 2 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Максимальная длительность паузы повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 4 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коды состояния ответа повторного выполнения</v8:content> + </v8:item> + + + v8:ValueListType + + + КодыСостоянияОтветаПовторногоВыполнения.Picture + КодыСостоянияОтветаПовторногоВыполнения.ValueType + + + xs:decimal + + 10 + 0 + Any + + + diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 2d65a7d..3082c88 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ОписаниеПеременных @@ -17,6 +17,8 @@ ИспользоватьСессию = Ложь; ПоддержкаCookie = Ложь; ПорогПеренаправлений = 10; + ПорогКоличестваПопытокПовторногоВыполнения = 9; + МаксимальнаяДлительностьПаузыПовторногоВыполнения = 600; Для Каждого КЗ Из КлиентHTTPПовтИсп.РегионыAWS() Цикл Элементы.РегионAWS.СписокВыбора.Добавить(КЗ.Значение); @@ -29,6 +31,7 @@ ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[0]; ТипТелаЗапросаКакЕсть = Элементы.ТипТелаЗапросаКакЕсть.СписокВыбора[0]; ФорматТелаОтвета = Элементы.ФорматТелаОтвета.СписокВыбора[0]; + СпособПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора[0]; ПротоколПрокси = Элементы.ПротоколПрокси.СписокВыбора[0]; ИдентификаторРесурса = "https://ya.ru"; @@ -657,6 +660,35 @@ Элементы.ОткрытьCookies.Доступность = (ИспользоватьСессию И ПоддержкаCookie); КонецПроцедуры +&НаКлиенте +Процедура СпособПовторногоВыполненияПриИзменении(Элемент) + СпособыПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора; + + Элементы.ГруппаПараметрыПовторногоВыполнения.Доступность = СпособПовторногоВыполнения <> СпособыПовторногоВыполнения[0].Значение; // Разово + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.Видимость = СпособПовторногоВыполнения <> СпособыПовторногоВыполнения[1].Значение; // Фиксировано + + Если СпособПовторногоВыполнения = СпособыПовторногоВыполнения[2].Значение Тогда // Линейно + ДлительностьПаузыПовторногоВыполнения = ?(ДлительностьПаузыПовторногоВыполнения < 1, 1, ДлительностьПаузыПовторногоВыполнения); + МаксимальнаяДлительностьПаузыПовторногоВыполнения = ?(МаксимальнаяДлительностьПаузыПовторногоВыполнения < 1, 1, МаксимальнаяДлительностьПаузыПовторногоВыполнения); + + Элементы.ДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.МаксимальнаяДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[3].Значение Тогда // Экспоненциально + ДлительностьПаузыПовторногоВыполнения = ?(ДлительностьПаузыПовторногоВыполнения < 1, 1, ДлительностьПаузыПовторногоВыполнения); + МаксимальнаяДлительностьПаузыПовторногоВыполнения = ?(МаксимальнаяДлительностьПаузыПовторногоВыполнения < 1, 1, МаксимальнаяДлительностьПаузыПовторногоВыполнения); + КоэффициентУвеличенияПаузыПовторногоВыполнения = ?(КоэффициентУвеличенияПаузыПовторногоВыполнения < 1, 1, КоэффициентУвеличенияПаузыПовторногоВыполнения); + + Элементы.ДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.МаксимальнаяДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Иначе + Элементы.ДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + Элементы.МаксимальнаяДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ИспользоватьПроксиПриИзменении(Элемент) Элементы.ГруппаСерверПрокси.Доступность = ИспользоватьПрокси; @@ -719,6 +751,8 @@ ОбъектИстории = Дополнительно.История.Получить(Стр.ВременнаяМетка); #Область Заполнение_конфигурации_Консоли + КодыСостояния = Новый Массив; + ОбъектИстории.Свойство("ВыполнятьНаСервере", ВыполнятьНаСервере); ОбъектИстории.Свойство("ТелоОтветаВФайл", ТелоОтветаВФайл); ОбъектИстории.Свойство("ИмяФайлаТелаОтвета", ИмяФайлаТелаОтвета); @@ -729,6 +763,12 @@ ОбъектИстории.Свойство("ПорогПеренаправлений", ПорогПеренаправлений); ОбъектИстории.Свойство("ПеренаправлениеКакGET", ПеренаправлениеКакGET); ОбъектИстории.Свойство("ПоддержкаCookie", ПоддержкаCookie); + ОбъектИстории.Свойство("СпособПовторногоВыполнения", СпособПовторногоВыполнения); + ОбъектИстории.Свойство("ДлительностьПаузыПовторногоВыполнения", ДлительностьПаузыПовторногоВыполнения); + ОбъектИстории.Свойство("КоэффициентУвеличенияПаузыПовторногоВыполнения", КоэффициентУвеличенияПаузыПовторногоВыполнения); + ОбъектИстории.Свойство("ПорогКоличестваПопытокПовторногоВыполнения", ПорогКоличестваПопытокПовторногоВыполнения); + ОбъектИстории.Свойство("МаксимальнаяДлительностьПаузыПовторногоВыполнения", МаксимальнаяДлительностьПаузыПовторногоВыполнения); + ОбъектИстории.Свойство("МассивКодовСостоянияОтветаПовторногоВыполнения", КодыСостояния); ОбъектИстории.Свойство("ИспользоватьПрокси", ИспользоватьПрокси); ОбъектИстории.Свойство("НеИспользоватьПроксиДляЛокальныхАдресов", НеИспользоватьПроксиДляЛокальныхАдресов); ОбъектИстории.Свойство("ПротоколПрокси", ПротоколПрокси); @@ -740,15 +780,24 @@ ВыполнятьНаСервере = НЕ ВыполнятьНаСервере; + КодыСостоянияОтветаПовторногоВыполнения.Очистить(); + Если Дополнительно.Сессия = Неопределено Тогда Дополнительно.Сессия = НоваяСессия(); КонецЕсли; + Если НЕ ЗначениеЗаполнено(СпособПовторногоВыполнения) Тогда + СпособПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора[0]; + КонецЕсли; + Если ЗначениеЗаполнено(КодыСостояния) Тогда + КодыСостоянияОтветаПовторногоВыполнения.ЗагрузитьЗначения(КодыСостояния); + КонецЕсли; Если НЕ ЗначениеЗаполнено(ПротоколПрокси) Тогда ПротоколПрокси = Элементы.ПротоколПрокси.СписокВыбора[0]; КонецЕсли; ИзменитьКонтекстВыполненияЗапроса(); ИспользоватьСессиюПриИзменении(Неопределено); + СпособПовторногоВыполненияПриИзменении(Неопределено); ИспользоватьПроксиПриИзменении(Неопределено); #КонецОбласти @@ -1376,6 +1425,12 @@ ОбъектИстории.Вставить("ПорогПеренаправлений", ПорогПеренаправлений); ОбъектИстории.Вставить("ПеренаправлениеКакGET", ПеренаправлениеКакGET); ОбъектИстории.Вставить("ПоддержкаCookie", ПоддержкаCookie); + ОбъектИстории.Вставить("СпособПовторногоВыполнения", СпособПовторногоВыполнения); + ОбъектИстории.Вставить("ДлительностьПаузыПовторногоВыполнения", ДлительностьПаузыПовторногоВыполнения); + ОбъектИстории.Вставить("КоэффициентУвеличенияПаузыПовторногоВыполнения", КоэффициентУвеличенияПаузыПовторногоВыполнения); + ОбъектИстории.Вставить("ПорогКоличестваПопытокПовторногоВыполнения", ПорогКоличестваПопытокПовторногоВыполнения); + ОбъектИстории.Вставить("МаксимальнаяДлительностьПаузыПовторногоВыполнения", МаксимальнаяДлительностьПаузыПовторногоВыполнения); + ОбъектИстории.Вставить("МассивКодовСостоянияОтветаПовторногоВыполнения", МассивКодовСостоянияОтветаПовторногоВыполнения()); ОбъектИстории.Вставить("ИспользоватьПрокси", ИспользоватьПрокси); ОбъектИстории.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", НеИспользоватьПроксиДляЛокальныхАдресов); ОбъектИстории.Вставить("ПротоколПрокси", ПротоколПрокси); @@ -1639,6 +1694,35 @@ КлиентHTTPКлиентСервер.УстановитьИмяВыходногоФайла(фРезультат, ИмяФайлаТелаОтвета); КонецЕсли; + СпособыПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора; + Если СпособПовторногоВыполнения = СпособыПовторногоВыполнения[1].Значение Тогда // Фиксировано + КлиентHTTPКлиентСервер.ФиксированоОтложенныеВыполнения( + фРезультат, + ДлительностьПаузыПовторногоВыполнения, + ПорогКоличестваПопытокПовторногоВыполнения, + МаксимальнаяДлительностьПаузыПовторногоВыполнения, + МассивКодовСостоянияОтветаПовторногоВыполнения() + ); + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[2].Значение Тогда // Линейно + КлиентHTTPКлиентСервер.ЛинейноОтложенныеВыполнения( + фРезультат, + ДлительностьПаузыПовторногоВыполнения, + КоэффициентУвеличенияПаузыПовторногоВыполнения, + ПорогКоличестваПопытокПовторногоВыполнения, + МаксимальнаяДлительностьПаузыПовторногоВыполнения, + МассивКодовСостоянияОтветаПовторногоВыполнения() + ); + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[3].Значение Тогда // Экспоненциально + КлиентHTTPКлиентСервер.ЭкспоненциальноОтложенныеВыполнения( + фРезультат, + ДлительностьПаузыПовторногоВыполнения, + КоэффициентУвеличенияПаузыПовторногоВыполнения, + ПорогКоличестваПопытокПовторногоВыполнения, + МаксимальнаяДлительностьПаузыПовторногоВыполнения, + МассивКодовСостоянияОтветаПовторногоВыполнения() + ); + КонецЕсли; + Возврат фРезультат; КонецФункции @@ -4102,6 +4186,11 @@ Возврат Новый Структура("Текст, ЗаголовокФормы, ЦветРедактируемогоТекста", Текст, "Команда curl", WebЦвета.Серебряный); КонецФункции +&НаКлиенте +Функция МассивКодовСостоянияОтветаПовторногоВыполнения() + Возврат КодыСостоянияОтветаПовторногоВыполнения.ВыгрузитьЗначения(); +КонецФункции + &НаСервереБезКонтекста Функция РазделительПутиСервера() Возврат ПолучитьРазделительПутиСервера(); From 6da74626dae2fd15695e3368a328b8d13ba1ccb6 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 17:44:15 +0300 Subject: [PATCH 10/20] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=20=D0=B2=20=D0=9A=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Form.xml" | 37 ++++++++++++++++++- .../Ext/Form/Module.bsl" | 6 +++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" index 987b19e..2e2e449 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -1,4 +1,4 @@ - + <v8:item> @@ -2653,6 +2653,25 @@ + + Таймаут + + + ru + Таймаут соединения в секундах + + + Button + true + + + ru + ЧН= + + + + + <v8:item> @@ -4830,6 +4849,22 @@ </v8:NumberQualifiers> </Settings> </Attribute> + <Attribute name="Таймаут" id="68"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Таймаут</v8:content> + </v8:item> + + + xs:decimal + + 3 + 0 + Nonnegative + + + diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 3082c88..e6cae93 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -758,6 +758,7 @@ ОбъектИстории.Свойство("ИмяФайлаТелаОтвета", ИмяФайлаТелаОтвета); ОбъектИстории.Свойство("ПоддержкаСжатогоОтвета", ПоддержкаСжатогоОтвета); ОбъектИстории.Свойство("АгентПользователя", АгентПользователя); + ОбъектИстории.Свойство("Таймаут", Таймаут); ОбъектИстории.Свойство("ИспользоватьСессию", ИспользоватьСессию); ОбъектИстории.Свойство("Сессия", Дополнительно.Сессия); ОбъектИстории.Свойство("ПорогПеренаправлений", ПорогПеренаправлений); @@ -1420,6 +1421,7 @@ ОбъектИстории.Вставить("ИмяФайлаТелаОтвета", ИмяФайлаТелаОтвета); ОбъектИстории.Вставить("ПоддержкаСжатогоОтвета", ПоддержкаСжатогоОтвета); ОбъектИстории.Вставить("АгентПользователя", АгентПользователя); + ОбъектИстории.Вставить("Таймаут", Таймаут); ОбъектИстории.Вставить("ИспользоватьСессию", ИспользоватьСессию); ОбъектИстории.Вставить("Сессия", Дополнительно.Сессия); ОбъектИстории.Вставить("ПорогПеренаправлений", ПорогПеренаправлений); @@ -1677,6 +1679,10 @@ КонецЕсли; КонецЕсли; + Если Таймаут > 0 Тогда + КлиентHTTPКлиентСервер.УстановитьТаймаут(фРезультат, Таймаут); + КонецЕсли; + Если ПоддержкаСжатогоОтвета Тогда КлиентHTTPКлиентСервер.УстановитьСжатиеОтветаGZIP(фРезультат); КонецЕсли; From 435b607264a0dd34cbe67e239cdb637623e10c85 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 19:14:49 +0300 Subject: [PATCH 11/20] =?UTF-8?q?feat:=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0=201=D0=A1?= =?UTF-8?q?=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Form/Module.bsl" | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index e6cae93..29a3029 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -2035,6 +2035,17 @@ ЕстьДополнительныеПараметры = Истина; КонецПроцедуры +&НаКлиенте +Процедура ДобавитьВКодЗапросаТаймаут(Построитель, ЕстьДополнительныеПараметры) + Если Таймаут = 0 Тогда + Возврат; + КонецЕсли; + + Построитель.Добавить(СтрШаблон(" .УстановитьТаймаут(ДополнительныеПараметры, %1)", XMLСтрока(Таймаут))); + + ЕстьДополнительныеПараметры = Истина; +КонецПроцедуры + &НаКлиенте Процедура ДобавитьВКодЗапросаАутентификацию(Построитель, ЕстьДополнительныеПараметры) ТипАутентификацииСписокВыбора = Элементы.ТипАутентификации.СписокВыбора; @@ -2544,6 +2555,7 @@ // Начало текучего интерфейса ЧастиКода.Добавить(СтрШаблон("Ответ = %1КлиентHTTPКлиентСервер", ?(ВыполнятьНаСервере, "", "Ждать "))); + ДобавитьВКодЗапросаТаймаут(ЧастиКода, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаИспользованиеПрокси(ЧастиКода, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаИспользованиеСессии(ЧастиКода, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаПараметры(ЧастиКода, ЕстьПараметрыЗапроса); From 79b236983be7154ccf8b57c1a0dcaec5167eaf73 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 19:48:07 +0300 Subject: [PATCH 12/20] =?UTF-8?q?feat:=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F/=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20curl=20=D1=81?= =?UTF-8?q?=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Form/Module.bsl" | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 29a3029..a9cc4e7 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -2780,6 +2780,16 @@ ЧастиКоманды.Добавить(СтрШаблон("""%1""", ИмяФайлаТелаОтвета)); КонецПроцедуры +&НаКлиенте +Процедура ЗаполнитьТаймаутCurlКоманды(ЧастиКоманды) + Если Таймаут = 0 Тогда + Возврат; + КонецЕсли; + + ЧастиКоманды.Добавить("--connect-timeout"); + ЧастиКоманды.Добавить(XMLСтрока(Таймаут)); +КонецПроцедуры + &НаКлиенте Процедура ЗаполнитьПроксиCurlКоманды(ЧастиКоманды) Если НЕ (ИспользоватьПрокси И ЗначениеЗаполнено(СерверПрокси)) Тогда @@ -2892,13 +2902,14 @@ ОтобразитьPOST = Ложь; РазделыКоманды = Новый Структура( - "Аутентификация, Тело, СохранениеОтветаВФайл, Прокси, Сессия, Сжатие, Заголовки, Схема", - Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив + "Аутентификация, Тело, Таймаут, СохранениеОтветаВФайл, Прокси, Сессия, Сжатие, Заголовки, Схема", + Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив ); ЗаполнитьАутентификациюCurlКоманды(РазделыКоманды.Аутентификация); ЗаполнитьТелоЗапросаCurlКоманды(РазделыКоманды.Тело, ОтобразитьPOST, ПредопределенныеЗаголовки); ЗаполнитьФайлОтветаCurlКоманды(РазделыКоманды.СохранениеОтветаВФайл); + ЗаполнитьТаймаутCurlКоманды(РазделыКоманды.Таймаут); ЗаполнитьПроксиCurlКоманды(РазделыКоманды.Прокси); ЗаполнитьСессиюCurlКоманды(РазделыКоманды.Сессия, ЧастиСложнойОпции); ЗаполнитьСжатиеCurlКоманды(РазделыКоманды.Сжатие); @@ -2921,6 +2932,7 @@ ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Заголовки); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Тело); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Прокси); + ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Таймаут); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.СохранениеОтветаВФайл); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Сжатие); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Сессия); @@ -3355,6 +3367,7 @@ фРезультат.Вставить("-x", Истина); фРезультат.Вставить("--proxy", Истина); фРезультат.Вставить("--proxy-basic", Ложь); + фРезультат.Вставить("--connect-timeout", Истина); Возврат фРезультат; КонецФункции @@ -3510,7 +3523,7 @@ &НаКлиенте Функция НовыйОбъектДанныхCurl() Возврат Новый Структура( - "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, Аутентификация, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", + "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, Аутентификация, Таймаут, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", Неопределено, Ложь, Новый Массив, @@ -3518,6 +3531,7 @@ Новый Массив, Ложь, Новый Структура("Тип, Пользователь, Пароль, Токен, РегионAWS, СервисAWS", Элементы.ТипАутентификации.СписокВыбора[0], "", "", "", "", ""), + 0, Ложь, Неопределено, Ложь, @@ -3852,6 +3866,9 @@ ДанныеИмпорта.НормализоватьИдентификаторРесурса = Ложь; ИначеЕсли ИмяОпции = "-G" ИЛИ ИмяОпции = "--get" Тогда ДанныеИмпорта.ПоляКакПараметры = Истина; + ИначеЕсли ИмяОпции = "--connect-timeout" Тогда + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ДанныеИмпорта.Таймаут = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); ИначеЕсли ИмяОпции = "-x" ИЛИ ИмяОпции = "--proxy" Тогда ОбработатьДанныеПрокси(ДанныеИмпорта, Опция, Отказ, ОписаниеОшибки); ИначеЕсли ИмяОпции = "--proxy-basic" Тогда @@ -4066,6 +4083,8 @@ ТелоЗапросаФайл = ТелоЗапросаИмпорт.Значение; КонецЕсли; + Таймаут = ДанныеИмпорта.Таймаут; + ИспользоватьСессию = ДанныеИмпорта.ИспользоватьРедиректы; Если ДанныеИмпорта.ИспользоватьРедиректы Тогда ПорогПеренаправлений = ?( From 7fd44371c6b4d5d6309ba62ccf3cc08f9f78cad1 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 21:43:39 +0300 Subject: [PATCH 13/20] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D1=81=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=BE=D0=B2=20=D1=81=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Клиентские коды состояния ответа. --- .../Ext/Module.bsl" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" index a251459..54fba4b 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" @@ -96,7 +96,7 @@ 308 // ПеренаправлениеНаПостояннойОснове ), Новый ФиксированнаяСтруктура( // Клиентские - "ПлохойЗапрос, НеАвторизовано, НеобходимаОплата, Запрещено, НеНайден, МетодНеРазрешен, НеПриемлемо, НеАвторизованоПрокси, Таймаут, Конфликт, Удалено, ТребуетсяРазмерКонтента, НевыполнимыеУсловия, ПревышенЛимитТела, ПревышенаДлинаURI, ТипМедиаНеПоддерживается, ДиапазонНеМожетБытьВыполнен, ОжиданиеНеМожетБытьВыполнено, Чайник, ТаймаутАвторизации, Мисдирект, НеобрабатываемыйЭкземпляр, Заблокировано, НевыполненнаяЗависимость, НеобходимоОбновление, НеобходимоПредусловие, СлишкомМногоЗапросов, ПоляЗаголовкаСлишкомБольшие, НедостаточноИнформации, НедоступноПоЮридическимПричинам, КлиентЗакрылСоединение", + "ПлохойЗапрос, НеАвторизовано, НеобходимаОплата, Запрещено, НеНайден, МетодНеРазрешен, НеПриемлемо, НеАвторизованоПрокси, Таймаут, Конфликт, Удалено, ТребуетсяРазмерКонтента, НевыполнимыеУсловия, ПревышенЛимитТела, ПревышенаДлинаURI, ТипМедиаНеПоддерживается, ДиапазонНеМожетБытьВыполнен, ОжиданиеНеМожетБытьВыполнено, Чайник, ТаймаутАвторизации, Мисдирект, НеобрабатываемыйЭкземпляр, Заблокировано, НевыполненнаяЗависимость, СлишкомРано, НеобходимоОбновление, НеобходимоПредусловие, СлишкомМногоЗапросов, ПоляЗаголовкаСлишкомБольшие, НедостаточноИнформации, НедоступноПоЮридическимПричинам, КлиентЗакрылСоединение", 400, // ПлохойЗапрос 401, // НеАвторизовано 402, // НеобходимаОплата From c3ac018e651cb965cc8246cd894835a02a2baccf Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 21:45:58 +0300 Subject: [PATCH 14/20] =?UTF-8?q?feat:=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0=201=D0=A1?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D1=82=D1=80=D0=B0=D0=B5?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Form/Module.bsl" | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index a9cc4e7..5600a02 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -1981,6 +1981,57 @@ ЕстьДополнительныеПараметры = Истина; КонецПроцедуры +&НаКлиенте +Процедура ДобавитьВКодЗапросаПовторноеВыполнение(Построитель, КодыСостояния, ЕстьДополнительныеПараметры) + СпособыПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора; + Если СпособПовторногоВыполнения = СпособыПовторногоВыполнения[0].Значение Тогда // Разово + Возврат; + КонецЕсли; + + КодыСостояния = КодыСостоянияОтветаПовторногоВыполнения.ВыгрузитьЗначения(); + + ЧастиСтроки = Новый Массив; + ОкончанияСтроки = Новый Массив; + Если СпособПовторногоВыполнения = СпособыПовторногоВыполнения[1].Значение Тогда // Фиксировано + ЧастиСтроки.Добавить(" .ФиксированоОтложенныеВыполнения(ДополнительныеПараметры"); + + ОкончанияСтроки.Добавить(?(ДлительностьПаузыПовторногоВыполнения = 1, "", XMLСтрока(ДлительностьПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(ПорогКоличестваПопытокПовторногоВыполнения = 9, "", XMLСтрока(ПорогКоличестваПопытокПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(МаксимальнаяДлительностьПаузыПовторногоВыполнения = 600, "", XMLСтрока(МаксимальнаяДлительностьПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(КодыСостояния.Количество() = 0, "", "КодыСостоянияПовторногоВыполнения")); + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[2].Значение Тогда // Линейно + ЧастиСтроки.Добавить(" .ЛинейноОтложенныеВыполнения(ДополнительныеПараметры"); + + ОкончанияСтроки.Добавить(?(ДлительностьПаузыПовторногоВыполнения = 1, "", XMLСтрока(ДлительностьПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(КоэффициентУвеличенияПаузыПовторногоВыполнения = 1, "", XMLСтрока(КоэффициентУвеличенияПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(ПорогКоличестваПопытокПовторногоВыполнения = 9, "", XMLСтрока(ПорогКоличестваПопытокПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(МаксимальнаяДлительностьПаузыПовторногоВыполнения = 600, "", XMLСтрока(МаксимальнаяДлительностьПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(КодыСостояния.Количество() = 0, "", "КодыСостоянияПовторногоВыполнения")); + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[3].Значение Тогда // Экспоненциально + ЧастиСтроки.Добавить(" .ЭкспоненциальноОтложенныеВыполнения(ДополнительныеПараметры"); + + ОкончанияСтроки.Добавить(?(ДлительностьПаузыПовторногоВыполнения = 1, "", XMLСтрока(ДлительностьПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(КоэффициентУвеличенияПаузыПовторногоВыполнения = 2, "", XMLСтрока(КоэффициентУвеличенияПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(ПорогКоличестваПопытокПовторногоВыполнения = 9, "", XMLСтрока(ПорогКоличестваПопытокПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(МаксимальнаяДлительностьПаузыПовторногоВыполнения = 3600, "", XMLСтрока(МаксимальнаяДлительностьПаузыПовторногоВыполнения))); + ОкончанияСтроки.Добавить(?(КодыСостояния.Количество() = 0, "", "КодыСостоянияПовторногоВыполнения")); + КонецЕсли; + + ВсегоЧастейОкончания = ОкончанияСтроки.Количество(); + Для _ = 1 По ВсегоЧастейОкончания Цикл + Если ОкончанияСтроки[ОкончанияСтроки.ВГраница()] <> "" Тогда + Прервать; + КонецЕсли; + + ОкончанияСтроки.Удалить(ОкончанияСтроки.ВГраница()); + КонецЦикла; + + ЧастиСтроки.Добавить(СтрСоединить(ОкончанияСтроки, ", ")); + Построитель.Добавить(СтрСоединить(ЧастиСтроки, ", ") + ")"); + + ЕстьДополнительныеПараметры = Истина; +КонецПроцедуры + &НаКлиенте Процедура ДобавитьВКодЗапросаПараметры(Построитель, ЕстьПараметрыЗапроса) Для Каждого Стр Из ПараметрыЗапроса Цикл @@ -2509,6 +2560,49 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ДобавитьВКодЗапросаИнициализациюПовторногоВыполнения(Построитель, Знач КодыСостояния) + Если КодыСостояния.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + КонстантыКодовСостояния = Новый Соответствие; + КонстантыКодовСостояния.Вставить(200, "КлиентHTTPПовтИсп.КодСостоянияУспешно()"); + КонстантыКодовСостояния.Вставить(201, "КлиентHTTPПовтИсп.КодСостоянияСоздано()"); + КонстантыКодовСостояния.Вставить(204, "КлиентHTTPПовтИсп.КодСостоянияУспешноБезСодержимого()"); + КонстантыКодовСостояния.Вставить(301, "КлиентHTTPПовтИсп.КодСостоянияПеремещен()"); + КонстантыКодовСостояния.Вставить(302, "КлиентHTTPПовтИсп.КодСостоянияНайден()"); + КонстантыКодовСостояния.Вставить(303, "КлиентHTTPПовтИсп.КодСостоянияПросмотрДругихРесурсов()"); + КонстантыКодовСостояния.Вставить(307, "КлиентHTTPПовтИсп.КодСостоянияВременноеПеренаправление()"); + КонстантыКодовСостояния.Вставить(308, "КлиентHTTPПовтИсп.КодСостоянияПеренаправление()"); + КонстантыКодовСостояния.Вставить(400, "КлиентHTTPПовтИсп.КодСостоянияПлохойЗапрос()"); + КонстантыКодовСостояния.Вставить(401, "КлиентHTTPПовтИсп.КодСостоянияНеАвторизовано()"); + КонстантыКодовСостояния.Вставить(403, "КлиентHTTPПовтИсп.КодСостоянияЗапрещено()"); + КонстантыКодовСостояния.Вставить(404, "КлиентHTTPПовтИсп.КодСостоянияНеНайден()"); + КонстантыКодовСостояния.Вставить(405, "КлиентHTTPПовтИсп.КодСостоянияМетодНеРазрешен()"); + КонстантыКодовСостояния.Вставить(408, "КлиентHTTPПовтИсп.КодСостоянияТаймаутНаКлиенте()"); + КонстантыКодовСостояния.Вставить(410, "КлиентHTTPПовтИсп.КодСостоянияУдалено()"); + КонстантыКодовСостояния.Вставить(413, "КлиентHTTPПовтИсп.КодСостоянияПревышенЛимитТела()"); + КонстантыКодовСостояния.Вставить(418, "КлиентHTTPПовтИсп.КодСостоянияЧайник()"); + КонстантыКодовСостояния.Вставить(429, "КлиентHTTPПовтИсп.КодСостоянияСлишкомМногоЗапросов()"); + КонстантыКодовСостояния.Вставить(500, "КлиентHTTPПовтИсп.КодСостоянияВнутренняяОшибкаСервера()"); + КонстантыКодовСостояния.Вставить(501, "КлиентHTTPПовтИсп.КодСостоянияНеВыполнено()"); + КонстантыКодовСостояния.Вставить(502, "КлиентHTTPПовтИсп.КодСостоянияПлохойШлюз()"); + КонстантыКодовСостояния.Вставить(503, "КлиентHTTPПовтИсп.КодСостоянияСервисНедоступен()"); + КонстантыКодовСостояния.Вставить(504, "КлиентHTTPПовтИсп.КодСостоянияТаймаутНаСервере()"); + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить("КодыСостоянияПовторногоВыполнения = Новый Массив;"); + + Для Каждого Код Из КодыСостояния Цикл + Константа = КонстантыКодовСостояния.Получить(Код); + ЧастиСтроки.Добавить(СтрШаблон("КодыСостоянияПовторногоВыполнения.Добавить(%1);", ?(Константа = Неопределено, XMLСтрока(Код), Константа))); + КонецЦикла; + + Построитель.Вставить(1, ""); + Построитель.Вставить(1, СтрСоединить(ЧастиСтроки, Символы.ПС)); +КонецПроцедуры + &НаКлиенте Процедура ДобавитьВКодЗапросаИнициализациюКонфигурации(Построитель, Знач ЕстьПараметрыЗапроса, Знач ЕстьДополнительныеПараметры, Знач ТребуетсяИмяФайлаТелаОтвета, Знач ЕстьТекстТелаЗапроса, Знач ЕстьПоляФормы) Если ЕстьПоляФормы Тогда @@ -2549,6 +2643,7 @@ ТребуетсяИмяФайлаТелаОтвета = Ложь; ТекстПолейФормы = Новый Массив; ФайлыПолейФормы = Новый Массив; + КодыСостоянияПовторногоВыполнения = Новый Массив; ДобавитьВКодЗапросаИдентификаторРесурса(ЧастиКода); @@ -2558,6 +2653,7 @@ ДобавитьВКодЗапросаТаймаут(ЧастиКода, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаИспользованиеПрокси(ЧастиКода, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаИспользованиеСессии(ЧастиКода, ЕстьДополнительныеПараметры); + ДобавитьВКодЗапросаПовторноеВыполнение(ЧастиКода, КодыСостоянияПовторногоВыполнения, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаПараметры(ЧастиКода, ЕстьПараметрыЗапроса); ДобавитьВКодЗапросаЗаголовки(ЧастиКода, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаСжатиеОтвета(ЧастиКода, ЕстьДополнительныеПараметры); @@ -2565,6 +2661,7 @@ ДобавитьВКодЗапросаФайлТелаОтвета(ЧастиКода, ЕстьДополнительныеПараметры, ТребуетсяИмяФайлаТелаОтвета); ДобавитьВКодЗапросаМетод(ЧастиКода, ЕстьТекстТелаЗапроса, ЕстьПоляФормы, ТекстПолейФормы, ФайлыПолейФормы, ЕстьПараметрыЗапроса, ЕстьДополнительныеПараметры); ДобавитьВКодЗапросаИнициализациюПолейФормы(ЧастиКода, ТекстПолейФормы, ФайлыПолейФормы); + ДобавитьВКодЗапросаИнициализациюПовторногоВыполнения(ЧастиКода, КодыСостоянияПовторногоВыполнения); ДобавитьВКодЗапросаИнициализациюКонфигурации(ЧастиКода, ЕстьПараметрыЗапроса, ЕстьДополнительныеПараметры, ТребуетсяИмяФайлаТелаОтвета, ЕстьТекстТелаЗапроса, ЕстьПоляФормы); Возврат СтрСоединить(ЧастиКода, Символы.ПС); From 7a9178b3605ee3c6ca76c60e0ad6df8e345940b4 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 21:48:55 +0300 Subject: [PATCH 15/20] =?UTF-8?q?feat:=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F/=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20curl=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=80=D0=B5=D1=82=D1=80=D0=B0=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Form/Module.bsl" | 87 +++++++++++++++++-- 1 file changed, 79 insertions(+), 8 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 5600a02..23f4936 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ОписаниеПеременных @@ -2707,6 +2707,22 @@ ); КонецФункции +&НаКлиенте +Процедура ЗаполнитьПовторноеВыполнениеCurlКоманды(ЧастиКоманды) + Способы = Элементы.СпособПовторногоВыполнения.СписокВыбора; + Если СпособПовторногоВыполнения <> Способы[1].Значение И СпособПовторногоВыполнения <> Способы[3].Значение Тогда // не Фиксировано и не Экспоненциально + Возврат; + КонецЕсли; + + ЧастиКоманды.Добавить("--retry"); + ЧастиКоманды.Добавить(XMLСтрока(ПорогКоличестваПопытокПовторногоВыполнения)); + + Если СпособПовторногоВыполнения = Способы[1].Значение Тогда // Фиксировано + ЧастиКоманды.Добавить("--retry-delay"); + ЧастиКоманды.Добавить(XMLСтрока(ДлительностьПаузыПовторногоВыполнения)); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ЗаполнитьПользователяИПарольCurlКоманды(ЧастиКоманды) Если НЕ ЗначениеЗаполнено(ПользовательАутентификации) Тогда @@ -2999,10 +3015,11 @@ ОтобразитьPOST = Ложь; РазделыКоманды = Новый Структура( - "Аутентификация, Тело, Таймаут, СохранениеОтветаВФайл, Прокси, Сессия, Сжатие, Заголовки, Схема", - Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив + "ПовторноеВыполнение, Аутентификация, Тело, Таймаут, СохранениеОтветаВФайл, Прокси, Сессия, Сжатие, Заголовки, Схема", + Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив ); + ЗаполнитьПовторноеВыполнениеCurlКоманды(РазделыКоманды.ПовторноеВыполнение); ЗаполнитьАутентификациюCurlКоманды(РазделыКоманды.Аутентификация); ЗаполнитьТелоЗапросаCurlКоманды(РазделыКоманды.Тело, ОтобразитьPOST, ПредопределенныеЗаголовки); ЗаполнитьФайлОтветаCurlКоманды(РазделыКоманды.СохранениеОтветаВФайл); @@ -3033,6 +3050,7 @@ ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.СохранениеОтветаВФайл); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Сжатие); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Сессия); + ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.ПовторноеВыполнение); Возврат СтрСоединить(ЧастиКоманды, " "); КонецФункции @@ -3449,6 +3467,8 @@ фРезультат.Вставить("--ntlm-wb", Ложь); фРезультат.Вставить("--oauth2-bearer", Истина); фРезультат.Вставить("--aws-sigv4", Истина); + фРезультат.Вставить("--retry", Истина); + фРезультат.Вставить("--retry-delay", Истина); фРезультат.Вставить("--compressed", Ложь); фРезультат.Вставить("--compressed-ssh", Ложь); фРезультат.Вставить("--tr-encoding", Ложь); @@ -3620,13 +3640,14 @@ &НаКлиенте Функция НовыйОбъектДанныхCurl() Возврат Новый Структура( - "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, Аутентификация, Таймаут, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", + "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, ПовторноеВыполнение, Аутентификация, Таймаут, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", Неопределено, Ложь, Новый Массив, Новый Массив, Новый Массив, Ложь, + Новый Структура("Применить, Способ, НачальнаяДлительность, КоэфициентУвеличения, ПорогКоличестваПопыток, МаксимальнаяДлительность", Ложь, Элементы.СпособПовторногоВыполнения.СписокВыбора[0], -1, -1, -1, -1), Новый Структура("Тип, Пользователь, Пароль, Токен, РегионAWS, СервисAWS", Элементы.ТипАутентификации.СписокВыбора[0], "", "", "", "", ""), 0, Ложь, @@ -3858,6 +3879,36 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОбработатьПовторноеВыполнениеCurl(ДанныеИмпорта, Знач Опция) + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ПорогКоличестваПопыток = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); + + ПВ = ДанныеИмпорта.ПовторноеВыполнение; + ПВ.ПорогКоличестваПопыток = ПорогКоличестваПопыток; + ПВ.Применить = ПорогКоличестваПопыток > 0; + + Если ПВ.Способ <> Элементы.СпособПовторногоВыполнения.СписокВыбора[0] Тогда // Разово + Возврат; + КонецЕсли; + + ПВ.Способ = Элементы.СпособПовторногоВыполнения.СписокВыбора[3]; // Экспоненциально + ПВ.НачальнаяДлительность = 1; + ПВ.КоэфициентУвеличения = 2; + ПВ.МаксимальнаяДлительность = Мин(КлиентHTTPПовтИсп.МаксимальноДопустимаяДлительностьПаузы(), Pow(2, ПорогКоличестваПопыток)); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьЗадержкуПовторногоВыполненияCurl(ДанныеИмпорта, Знач Опция) + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + НачальнаяДлительность = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); + + ПВ = ДанныеИмпорта.ПовторноеВыполнение; + ПВ.Способ = Элементы.СпособПовторногоВыполнения.СписокВыбора[1]; // Фиксировано + ПВ.НачальнаяДлительность = НачальнаяДлительность; + ПВ.МаксимальнаяДлительность = Макс(600, НачальнаяДлительность); +КонецПроцедуры + &НаКлиенте Процедура ОбработатьДанныеПрокси(ДанныеИмпорта, Знач Опция, Отказ, ОписаниеОшибки) ЗначениеОпции = Опция.Значение; @@ -3948,10 +3999,17 @@ ДанныеИмпорта.Аутентификация.Токен = Опция.Значение; ИначеЕсли ИмяОпции = "--aws-sigv4" Тогда ОбработатьДанныеАутентификацииAWSCurl(ДанныеИмпорта, Опция); + ИначеЕсли ИмяОпции = "--retry" Тогда + ОбработатьПовторноеВыполнениеCurl(ДанныеИмпорта, Опция); + ИначеЕсли ИмяОпции = "--retry-delay" Тогда + ОбработатьЗадержкуПовторногоВыполненияCurl(ДанныеИмпорта, Опция); ИначеЕсли ИмяОпции = "-L" ИЛИ ИмяОпции = "--location" ИЛИ ИмяОпции = "--location-trusted" Тогда ДанныеИмпорта.ИспользоватьРедиректы = Истина; ИначеЕсли ИмяОпции = "--max-redirs" Тогда ДанныеИмпорта.КоличествоРедиректов = Опция.Значение; + ИначеЕсли ИмяОпции = "--connect-timeout" Тогда + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ДанныеИмпорта.Таймаут = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); ИначеЕсли ИмяОпции = "--compressed" ИЛИ ИмяОпции = "--compressed-ssh" ИЛИ ИмяОпции = "--tr-encoding" Тогда ДанныеИмпорта.ПоддержкаСжатогоОтвета = Истина; ИначеЕсли ИмяОпции = "-o" ИЛИ ИмяОпции = "--output" Тогда @@ -3963,9 +4021,6 @@ ДанныеИмпорта.НормализоватьИдентификаторРесурса = Ложь; ИначеЕсли ИмяОпции = "-G" ИЛИ ИмяОпции = "--get" Тогда ДанныеИмпорта.ПоляКакПараметры = Истина; - ИначеЕсли ИмяОпции = "--connect-timeout" Тогда - ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); - ДанныеИмпорта.Таймаут = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); ИначеЕсли ИмяОпции = "-x" ИЛИ ИмяОпции = "--proxy" Тогда ОбработатьДанныеПрокси(ДанныеИмпорта, Опция, Отказ, ОписаниеОшибки); ИначеЕсли ИмяОпции = "--proxy-basic" Тогда @@ -4133,12 +4188,27 @@ КонецЕсли; Если ДанныеИмпорта.Схема = Неопределено Тогда - ДанныеИмпорта.Схема = Элементы.Схема.СписокВыбора[0].Значение; // GET + ДанныеИмпорта.Схема = Элементы.Схема.СписокВыбора[0]; // GET КонецЕсли; ИдентификаторРесурса = ЧастиКоманды.ИдентификаторРесурса; Схема = ДанныеИмпорта.Схема; + Если ДанныеИмпорта.ПовторноеВыполнение.Применить Тогда + ПВ = ДанныеИмпорта.ПовторноеВыполнение; + СпособПовторногоВыполнения = ПВ.Способ; + ДлительностьПаузыПовторногоВыполнения = ПВ.НачальнаяДлительность; + КоэффициентУвеличенияПаузыПовторногоВыполнения = ?(ПВ.КоэфициентУвеличения < 0, КоэффициентУвеличенияПаузыПовторногоВыполнения, ПВ.КоэфициентУвеличения); + ПорогКоличестваПопытокПовторногоВыполнения = ПВ.ПорогКоличестваПопыток; + МаксимальнаяДлительностьПаузыПовторногоВыполнения = ПВ.МаксимальнаяДлительность; + + КодыСостоянияОтветаПовторногоВыполнения.Очистить(); + КодыСостоянияОтветаПовторногоВыполнения.Добавить(КлиентHTTPПовтИсп.КодСостоянияТаймаутНаКлиенте()); + КодыСостоянияОтветаПовторногоВыполнения.Добавить(КлиентHTTPПовтИсп.КодСостоянияСлишкомМногоЗапросов()); + Иначе + СпособПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора[0]; + КонецЕсли; + ТипАутентификации = ДанныеИмпорта.Аутентификация.Тип.Значение; Если ТипАутентификации <> Элементы.ТипАутентификации.СписокВыбора[0].Значение Тогда СписокТиповАутентификации = Элементы.ТипАутентификации.СписокВыбора; @@ -4212,6 +4282,7 @@ ИдентификаторРесурсаПриИзменении(Неопределено); ТипАутентификацииПриИзменении(Неопределено); ТипТелаЗапросаПриИзменении(Неопределено); + СпособПовторногоВыполненияПриИзменении(Неопределено); ИспользоватьПроксиПриИзменении(Неопределено); РазделыКонсоли = Элементы.РазделыКонсоли.СписокВыбора[0]; From aa60b0b655c0df9e6663f611a94f8dde87888754 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 21:53:51 +0300 Subject: [PATCH 16/20] =?UTF-8?q?docs:=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=8D=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Убрал пояснение "необязательный" и добавил пометку "СЛУЖЕБНЫЙ". --- .../Ext/Module.bsl" | 24 ++--- .../Ext/Module.bsl" | 4 +- .../Ext/Module.bsl" | 18 ++-- .../Ext/Module.bsl" | 94 +++++++++---------- .../Ext/Module.bsl" | 2 +- 5 files changed, 71 insertions(+), 71 deletions(-) diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" index ae7b89f..baa25d1 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ПрограммныйИнтерфейс @@ -9,8 +9,8 @@ // Данные - Массив - поля HTML-формы. Элементы - Структура с ключами: // * Ключ - Строка - имя поля // * Значение - Строка - значение поля -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // ФиксированнаяСтруктура - объект ответа: @@ -53,13 +53,13 @@ // Данные - Массив - тело запроса. Элементы - Структура с ключами: // * Ключ - Строка - имя поля // * Значение - Строка, Файл - значение поля -// * ТипMIME - Строка - тип значения поля (необязательный) -// * Файл - Структура (необязательный), ключи: -// ** Имя - Строка - имя файла (необязательный), -// ** ТипMIME - Строка - MIME-тип содержимого файла (необязательный), -// ** Кодировка - Строка - кодировка файла (необязательный) -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// * ТипMIME - Строка - тип значения поля +// * Файл - Структура, ключи: +// ** Имя - Строка - имя файла, +// ** ТипMIME - Строка - MIME-тип содержимого файла, +// ** Кодировка - Строка - кодировка файла +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // ФиксированнаяСтруктура - объект ответа: @@ -340,7 +340,7 @@ // Параметры: // Метод - Строка - имя HTTP-метода // Конфигурация - Структура - конфигурация выполнения запроса -// ДанныеАдресВХ - Строка, Неопределено - адрес данных тела запроса во временном хранилище (необязательный) +// ДанныеАдресВХ - Строка, Неопределено - адрес данных тела запроса во временном хранилище // // Возвращаемое значение: // Строка - значение заголовка Hawk-аутентификации @@ -629,7 +629,7 @@ #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс -// Добавляет запись ошибки в журнал регистрации +// (СЛУЖЕБНЫЙ) Добавляет запись ошибки в журнал регистрации // // Параметры: // Данные - Ссылка, Число, Строка, Дата, Булево, Неопределено, Null, Тип - данные, с которыми связано событие diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" index 57c99aa..ea95c77 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\222\321\213\320\267\320\276\320\262\320\241\320\265\321\200\320\262\320\265\321\200\320\260/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область СлужебныйПрограммныйИнтерфейс @@ -76,7 +76,7 @@ // Параметры: // Метод - Строка - имя HTTP-метода // Конфигурация - Структура - конфигурация выполнения запроса -// ДанныеАдресВХ - Строка, Неопределено - адрес данных тела запроса во временном хранилище (необязательный) +// ДанныеАдресВХ - Строка, Неопределено - адрес данных тела запроса во временном хранилище // // Возвращаемое значение: // Строка - значение заголовка Hawk-аутентификации diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" index e1e46e9..f78b9b1 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" @@ -9,8 +9,8 @@ // Данные - Массив - поля HTML-формы. Элементы - Структура с ключами: // * Ключ - Строка - имя поля // * Значение - Строка - значение поля -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание - содержит объект ответа (ФиксированнаяСтруктура): @@ -53,13 +53,13 @@ // Данные - Массив - тело запроса. Элементы - Структура с ключами: // * Ключ - Строка - имя поля // * Значение - Строка, Файл - значение поля -// * ТипMIME - Строка - тип значения поля (необязательный) -// * Файл - Структура (необязательный), ключи: -// ** Имя - Строка - имя файла (необязательный), -// ** ТипMIME - Строка - MIME-тип содержимого файла (необязательный), -// ** Кодировка - Строка - кодировка файла (необязательный) -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// * ТипMIME - Строка - тип значения поля +// * Файл - Структура, ключи: +// ** Имя - Строка - имя файла, +// ** ТипMIME - Строка - MIME-тип содержимого файла, +// ** Кодировка - Строка - кодировка файла +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание - содержит объект ответа (ФиксированнаяСтруктура): diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" index f4b698f..f327b0a 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\232\320\273\320\270\320\265\320\275\321\202\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ПрограммныйИнтерфейс @@ -6,8 +6,8 @@ // // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса -// ПараметрыЗапроса - Соответствие - коллекция параметров GET-запроса (необязательный) -// ДополнительныеПараметры - Структура - конфигурация выполнения POST-запроса (необязательный) +// ПараметрыЗапроса - Соответствие - коллекция параметров GET-запроса +// ДополнительныеПараметры - Структура - конфигурация выполнения POST-запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -28,8 +28,8 @@ // // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -51,8 +51,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - ДвоичныеДанные - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -75,8 +75,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - ДвоичныеДанные - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -99,8 +99,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - ДвоичныеДанные - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Обещание, Возвращаемое значение: // ФиксированнаяСтруктура - объект ответа: @@ -122,9 +122,9 @@ // // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса -// Данные - Строка - тело запроса (необязательный) -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// Данные - Строка - тело запроса +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -151,8 +151,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - Строка - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -187,8 +187,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - Файл - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Обещание, Возвращаемое значение: // ФиксированнаяСтруктура - объект ответа: @@ -222,8 +222,8 @@ // Данные - Массив - поля HTML-формы. Элементы - Структура с ключами: // * Ключ - Строка - имя поля // * Значение - Строка - значение поля -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -248,13 +248,13 @@ // Данные - Массив - тело запроса. Элементы - Структура с ключами: // * Ключ - Строка - имя поля // * Значение - Строка, Файл - значение поля -// * ТипMIME - Строка - тип значения поля (необязательный) -// * Файл - Структура (необязательный), ключи: -// ** Имя - Строка - имя файла (необязательный), -// ** ТипMIME - Строка - MIME-тип содержимого файла (необязательный), -// ** Кодировка - Строка - кодировка файла (необязательный) -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// * ТипMIME - Строка - тип значения поля +// * Файл - Структура, ключи: +// ** Имя - Строка - имя файла, +// ** ТипMIME - Строка - MIME-тип содержимого файла, +// ** Кодировка - Строка - кодировка файла +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -277,8 +277,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - Строка - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -313,8 +313,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - Файл - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -346,8 +346,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - Строка - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -382,8 +382,8 @@ // Параметры: // ИдентификаторРесурса - Строка, Структура - URI сервиса либо объект идентификатора ресурса // Данные - Файл - тело запроса -// ДополнительныеПараметры - Структура - конфигурация выполнения запроса (необязательный) -// ПараметрыЗапроса - Соответствие - коллекция параметров запроса (необязательный) +// ДополнительныеПараметры - Структура - конфигурация выполнения запроса +// ПараметрыЗапроса - Соответствие - коллекция параметров запроса // // Возвращаемое значение: // Обещание, ФиксированнаяСтруктура - объект ответа: @@ -737,7 +737,7 @@ // // Параметры: // ДополнительныеПараметры - Структура - конфигурация выполнения запроса -// КакGET - Булево - установить переключение на GET (необязательный) +// КакGET - Булево - установить переключение на GET // // Возвращаемое значение: // ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции @@ -829,8 +829,8 @@ // ДополнительныеПараметры - Структура - конфигурация выполнения запроса // КлючДоступа - Строка - AWS ключ доступа // СекретныйКлюч - Строка - AWS секретный ключ -// Регион - Строка - AWS регион получателя запроса (необязательный) -// Сервис - Строка - AWS сервис получателя запроса (необязательный) +// Регион - Строка - AWS регион получателя запроса +// Сервис - Строка - AWS сервис получателя запроса // // Возвращаемое значение: // ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции @@ -847,9 +847,9 @@ // ДополнительныеПараметры - Структура - конфигурация выполнения запроса // Идентификатор - Строка - ID аутентификации // Ключ - Строка - секретный ключ -// Дополнение - Строка - (ext) специфические данные клиента (необязательный) -// ИдентификаторПриложения - Строка - (app) идентификатор приложения (необязательный) -// Делегирование - Строка - (dlg) выданный идентификатор приложения (необязательный) +// Дополнение - Строка - (ext) специфические данные клиента +// ИдентификаторПриложения - Строка - (app) идентификатор приложения +// Делегирование - Строка - (dlg) выданный идентификатор приложения // // Возвращаемое значение: // ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции @@ -897,7 +897,7 @@ // // Параметры: // ДополнительныеПараметры - Структура - конфигурация выполнения запроса -// Кодировка - КодировкаТекста, Строка, Неопределено - кодировка (необязательный) - - +// Кодировка - КодировкаТекста, Строка, Неопределено - кодировка // // Возвращаемое значение: // ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции @@ -1134,8 +1134,8 @@ // ПоляФормы - Массив - коллекция полей формы // Ключ - Строка - наименование поля // Значение - Строка - значение текстового поля -// ТипMIME - Строка, Неопределено - MIME-тип (необязательный) -// Кодировка - КодировкаТекста, Строка, Неопределено - кодировка текста поля формы (необязательный) +// ТипMIME - Строка, Неопределено - MIME-тип +// Кодировка - КодировкаТекста, Строка, Неопределено - кодировка текста поля формы // // Возвращаемое значение: // ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции @@ -1161,9 +1161,9 @@ // ПоляФормы - Массив - коллекция полей формы // Ключ - Строка - наименование поля // Значение - Файл - объект доступа к файлу -// ИмяФайла - Строка, Неопределено - имя файла в поле формы (необязательный) -// ТипMIME - Строка, Неопределено - MIME-тип содержимого файла (необязательный) -// Кодировка - КодировкаТекста, Строка, Неопределено - кодировка содержимого файла (необязательный) +// ИмяФайла - Строка, Неопределено - имя файла в поле формы +// ТипMIME - Строка, Неопределено - MIME-тип содержимого файла +// Кодировка - КодировкаТекста, Строка, Неопределено - кодировка содержимого файла // // Возвращаемое значение: // ОбщийМодуль.КлиентHTTPКлиентСервер - модуль вызова функции diff --git "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" index 359f1d7..e00984c 100644 --- "a/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" +++ "b/src/v2/CommonModules/\320\232\320\273\320\270\320\265\320\275\321\202HTTP\320\241\320\265\321\200\320\262\320\265\321\200\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0+ #Область СлужебныйПрограммныйИнтерфейс -// Возвращает словарь типов хеш-функций по наименованиям из заголовка WWW-Authenticate +// (СЛУЖЕБНЫЙ) Возвращает словарь типов хеш-функций по наименованиям из заголовка WWW-Authenticate // // Возвращаемое значение: // ФиксированноеСоответствие - словарь типов хеш-функций From 44340519c1c3ffbcaab4daac5074e1da44989f52 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 22:19:35 +0300 Subject: [PATCH 17/20] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82=20?= =?UTF-8?q?=D0=B2=20=D0=9A=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B1=D0=B8=D0=BB=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Генерация/импорт команды curl для таймаута добавил. --- .../Ext/Form.xml" | 37 ++++++++++++++++++- .../Ext/Form/Module.bsl" | 34 ++++++++++++++--- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" index 1832de3..4e594f4 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" @@ -1,4 +1,4 @@ - + <v8:item> @@ -2095,6 +2095,25 @@ + + Таймаут + + + ru + Таймаут соединения в секундах + + + Button + true + + + ru + ЧН= + + + + + @@ -3321,6 +3340,22 @@ + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Таймаут</v8:content> + </v8:item> + + + xs:decimal + + 3 + 0 + Nonnegative + + + diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" index 6cdbe17..39bb8fa 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ОписаниеПеременных @@ -897,7 +897,8 @@ ПарольПрокси, ИспользоватьАутентификациюОСПрокси, , - НеИспользоватьПроксиДляЛокальныхАдресов + НеИспользоватьПроксиДляЛокальныхАдресов, + ПротоколПрокси ); КонецЕсли; @@ -912,6 +913,10 @@ КонецЕсли; КонецЕсли; + Если Таймаут > 0 Тогда + КлиентHTTPКлиентСервер.УстановитьТаймаут(фРезультат, Таймаут); + КонецЕсли; + Если НЕ ПустаяСтрока(АгентПользователя) Тогда КлиентHTTPКлиентСервер.УстановитьАгентаПользователя(фРезультат, АгентПользователя); КонецЕсли; @@ -1616,6 +1621,16 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ЗаполнитьТаймаутCurlКоманды(ЧастиКоманды) + Если Таймаут = 0 Тогда + Возврат; + КонецЕсли; + + ЧастиКоманды.Добавить("--connect-timeout"); + ЧастиКоманды.Добавить(XMLСтрока(Таймаут)); +КонецПроцедуры + &НаКлиенте Процедура ЗаполнитьПроксиCurlКоманды(ЧастиКоманды) Если НЕ (ИспользоватьПрокси И ЗначениеЗаполнено(СерверПрокси)) Тогда @@ -1721,12 +1736,13 @@ ОтобразитьPOST = Ложь; РазделыКоманды = Новый Структура( - "Аутентификация, Тело, Прокси, Сессия, Заголовки, Схема", - Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив + "Аутентификация, Тело, Таймаут, Прокси, Сессия, Заголовки, Схема", + Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив ); ЗаполнитьАутентификациюCurlКоманды(РазделыКоманды.Аутентификация); ЗаполнитьТелоЗапросаCurlКоманды(РазделыКоманды.Тело, ОтобразитьPOST, ПредопределенныеЗаголовки); + ЗаполнитьТаймаутCurlКоманды(РазделыКоманды.Таймаут); ЗаполнитьПроксиCurlКоманды(РазделыКоманды.Прокси); ЗаполнитьСессиюCurlКоманды(РазделыКоманды.Сессия, ЧастиСложнойОпции); ЗаполнитьЗаголовкиCurlКоманды(РазделыКоманды.Заголовки, ПредопределенныеЗаголовки); @@ -1748,6 +1764,7 @@ ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Заголовки); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Тело); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Прокси); + ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Таймаут); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Сессия); Возврат СтрСоединить(ЧастиКоманды, " "); @@ -1796,6 +1813,7 @@ фРезультат.Вставить("-x", Истина); фРезультат.Вставить("--proxy", Истина); фРезультат.Вставить("--proxy-basic", Ложь); + фРезультат.Вставить("--connect-timeout", Истина); Возврат фРезультат; КонецФункции @@ -1951,7 +1969,7 @@ &НаКлиенте Функция НовыйОбъектДанныхCurl() Возврат Новый Структура( - "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, Аутентификация, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, ТолькоИмяФайла, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", + "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, Аутентификация, Таймаут, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, ТолькоИмяФайла, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", Неопределено, Ложь, Новый Массив, @@ -1959,6 +1977,7 @@ Новый Массив, Ложь, Новый Структура("Тип, Пользователь, Пароль, Токен, РегионAWS, СервисAWS", Элементы.ТипАутентификации.СписокВыбора[0], "", "", "", "", ""), + 0, Ложь, Неопределено, Ложь, @@ -2283,6 +2302,9 @@ ДанныеИмпорта.ИспользоватьРедиректы = Истина; ИначеЕсли ИмяОпции = "--max-redirs" Тогда ДанныеИмпорта.КоличествоРедиректов = Опция.Значение; + ИначеЕсли ИмяОпции = "--connect-timeout" Тогда + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ДанныеИмпорта.Таймаут = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); ИначеЕсли ИмяОпции = "--path-as-is" Тогда ДанныеИмпорта.НормализоватьИдентификаторРесурса = Ложь; ИначеЕсли ИмяОпции = "-G" ИЛИ ИмяОпции = "--get" Тогда @@ -2448,6 +2470,8 @@ ТелоЗапросаФайл = ТелоЗапросаИмпорт.Значение; КонецЕсли; + Таймаут = ДанныеИмпорта.Таймаут; + ИспользоватьСессию = ДанныеИмпорта.ИспользоватьРедиректы; Если ДанныеИмпорта.ИспользоватьРедиректы Тогда ПорогПеренаправлений = ?( From 8c754f2dcfeef94356b35cd79e534f97e64a6938 Mon Sep 17 00:00:00 2001 From: SpaceHead1C Date: Sun, 21 May 2023 22:44:34 +0300 Subject: [PATCH 18/20] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=80=D0=B5=D1=82=D1=80=D0=B0=D0=B8=20=D0=B2=20?= =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D1=81=D0=BE=D0=BB=D1=8C=20=D0=BC=D0=BE=D0=B1?= =?UTF-8?q?=D0=B8=D0=BB=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Генерация/импорт команды curl для ретраев добавил. --- .../Ext/Form.xml" | 333 +++++++++++++++++- .../Ext/Form/Module.bsl" | 147 +++++++- 2 files changed, 474 insertions(+), 6 deletions(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" index 4e594f4..aa233c9 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form.xml" @@ -1,4 +1,4 @@ - + <v8:item> @@ -2236,6 +2236,235 @@ </UsualGroup> </ChildItems> </UsualGroup> + <UsualGroup name="ГруппаПовторноеВыполнение" id="394"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Повторное выполнение</v8:content> + </v8:item> + + + + ru + Повторять попытки выполнить HTTP-запрос после неуспешного результата. + +Неуспешным считается вызов исключения и ответ с кодом состояния 5хх или каким-либо из определённых пользователем. + + + Button + Vertical + Usual + + + + СпособПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ</v8:content> + </v8:item> + + + + ru + Способ расчёта паузы перед повторным выполнением + + + Button + true + false + false + false + false + false + true + false + + + + 0 + + + + ru + Разово + + + Разово + + + + + 0 + + + + ru + Фиксировано + + + Фиксировано + + + + + 0 + + + + ru + Линейно + + + Линейно + + + + + 0 + + + + ru + Экспоненциально + + + Экспоненциально + + + + + + + СпособПовторногоВыполненияПриИзменении + + + + false + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа параметры повторного выполнения</v8:content> + </v8:item> + + + + ru + Группа параметры повторного выполнения + + + Vertical + Usual + None + false + + + + ДлительностьПаузыПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительность</v8:content> + </v8:item> + + + + ru + Длительность в секундах паузы после первой попытки выполнения HTTP-запроса + + + Button + + + + + МаксимальнаяДлительностьПаузыПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в пределе до</v8:content> + </v8:item> + + + + ru + Максимальная длительность в секундах паузы между попытками в секундах (ограничение фреймворка 3600) + + + Button + + + + + КоэффициентУвеличенияПаузыПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент</v8:content> + </v8:item> + + + + ru + Коэффициент увеличения паузы между попытками выполнить HTTP-запрос + + + Button + + + + + ПорогКоличестваПопытокПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество попыток</v8:content> + </v8:item> + + + + ru + Максимальное количество неуспешных попыток выполнить HTTP-запрос + + + Button + 1 + + + + + КодыСостоянияОтветаПовторногоВыполнения + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коды состояния ответа</v8:content> + </v8:item> + + + + ru + коды состояния ответа, при получении которых необходимо повторять попытки + + + Button + false + false + false + true + true + false + false + false + 999 + 100 + 599 + + + + + + + true @@ -3340,6 +3569,108 @@ </v8:StringQualifiers> </Type> </Attribute> + <Attribute name="СпособПовторногоВыполнения" id="49"> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Способ повторного выполнения</v8:content> + </v8:item> + + + xs:string + + 100 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительность паузы повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 4 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Максимальная длительность паузы повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 4 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент увеличения паузы повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 4 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Порог количества попыток повторного выполнения</v8:content> + </v8:item> + + + xs:decimal + + 2 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коды состояния ответа повторного выполнения</v8:content> + </v8:item> + + + v8:ValueListType + + + КодыСостоянияОтветаПовторногоВыполнения.Picture + КодыСостоянияОтветаПовторногоВыполнения.ValueType + + + xs:decimal + + 10 + 0 + Any + + + <v8:item> diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" index 39bb8fa..af8f882 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260\320\234\320\237/Ext/Form/Module.bsl" @@ -1,4 +1,4 @@ - + // SPDX-License-Identifier: Apache-2.0+ #Область ОписаниеПеременных @@ -24,11 +24,14 @@ ИспользоватьСессию = Ложь; ПоддержкаCookie = Ложь; ПорогПеренаправлений = 10; + ПорогКоличестваПопытокПовторногоВыполнения = 9; + МаксимальнаяДлительностьПаузыПовторногоВыполнения = 600; Схема = Элементы.Схема.СписокВыбора[0]; ТипАутентификации = Элементы.ТипАутентификации.СписокВыбора[0]; AWSРегион = Элементы.РегионAWS.СписокВыбора[0].Значение; ТипТелаЗапроса = Элементы.ТипТелаЗапроса.СписокВыбора[0]; + СпособПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора[0]; ПротоколПрокси = Элементы.ПротоколПрокси.СписокВыбора[0]; ИдентификаторРесурса = "https://ya.ru"; @@ -581,6 +584,35 @@ Элементы.ОткрытьCookies.Доступность = (ИспользоватьСессию И ПоддержкаCookie); КонецПроцедуры +&НаКлиенте +Процедура СпособПовторногоВыполненияПриИзменении(Элемент) + СпособыПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора; + + Элементы.ГруппаПараметрыПовторногоВыполнения.Доступность = СпособПовторногоВыполнения <> СпособыПовторногоВыполнения[0].Значение; // Разово + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.Видимость = СпособПовторногоВыполнения <> СпособыПовторногоВыполнения[1].Значение; // Фиксировано + + Если СпособПовторногоВыполнения = СпособыПовторногоВыполнения[2].Значение Тогда // Линейно + ДлительностьПаузыПовторногоВыполнения = ?(ДлительностьПаузыПовторногоВыполнения < 1, 1, ДлительностьПаузыПовторногоВыполнения); + МаксимальнаяДлительностьПаузыПовторногоВыполнения = ?(МаксимальнаяДлительностьПаузыПовторногоВыполнения < 1, 1, МаксимальнаяДлительностьПаузыПовторногоВыполнения); + + Элементы.ДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.МаксимальнаяДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[3].Значение Тогда // Экспоненциально + ДлительностьПаузыПовторногоВыполнения = ?(ДлительностьПаузыПовторногоВыполнения < 1, 1, ДлительностьПаузыПовторногоВыполнения); + МаксимальнаяДлительностьПаузыПовторногоВыполнения = ?(МаксимальнаяДлительностьПаузыПовторногоВыполнения < 1, 1, МаксимальнаяДлительностьПаузыПовторногоВыполнения); + КоэффициентУвеличенияПаузыПовторногоВыполнения = ?(КоэффициентУвеличенияПаузыПовторногоВыполнения < 1, 1, КоэффициентУвеличенияПаузыПовторногоВыполнения); + + Элементы.ДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.МаксимальнаяДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.МинимальноеЗначение = 1; + Иначе + Элементы.ДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + Элементы.МаксимальнаяДлительностьПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + Элементы.КоэффициентУвеличенияПаузыПовторногоВыполнения.МинимальноеЗначение = 0; + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ИспользоватьПроксиПриИзменении(Элемент) Элементы.ПротоколПрокси.Доступность = ИспользоватьПрокси; @@ -921,6 +953,35 @@ КлиентHTTPКлиентСервер.УстановитьАгентаПользователя(фРезультат, АгентПользователя); КонецЕсли; + СпособыПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора; + Если СпособПовторногоВыполнения = СпособыПовторногоВыполнения[1].Значение Тогда // Фиксировано + КлиентHTTPКлиентСервер.ФиксированоОтложенныеВыполнения( + фРезультат, + ДлительностьПаузыПовторногоВыполнения, + ПорогКоличестваПопытокПовторногоВыполнения, + МаксимальнаяДлительностьПаузыПовторногоВыполнения, + МассивКодовСостоянияОтветаПовторногоВыполнения() + ); + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[2].Значение Тогда // Линейно + КлиентHTTPКлиентСервер.ЛинейноОтложенныеВыполнения( + фРезультат, + ДлительностьПаузыПовторногоВыполнения, + КоэффициентУвеличенияПаузыПовторногоВыполнения, + ПорогКоличестваПопытокПовторногоВыполнения, + МаксимальнаяДлительностьПаузыПовторногоВыполнения, + МассивКодовСостоянияОтветаПовторногоВыполнения() + ); + ИначеЕсли СпособПовторногоВыполнения = СпособыПовторногоВыполнения[3].Значение Тогда // Экспоненциально + КлиентHTTPКлиентСервер.ЭкспоненциальноОтложенныеВыполнения( + фРезультат, + ДлительностьПаузыПовторногоВыполнения, + КоэффициентУвеличенияПаузыПовторногоВыполнения, + ПорогКоличестваПопытокПовторногоВыполнения, + МаксимальнаяДлительностьПаузыПовторногоВыполнения, + МассивКодовСостоянияОтветаПовторногоВыполнения() + ); + КонецЕсли; + Возврат фРезультат; КонецФункции @@ -1461,6 +1522,22 @@ ); КонецФункции +&НаКлиенте +Процедура ЗаполнитьПовторноеВыполнениеCurlКоманды(ЧастиКоманды) + Способы = Элементы.СпособПовторногоВыполнения.СписокВыбора; + Если СпособПовторногоВыполнения <> Способы[1].Значение И СпособПовторногоВыполнения <> Способы[3].Значение Тогда // не Фиксировано и не Экспоненциально + Возврат; + КонецЕсли; + + ЧастиКоманды.Добавить("--retry"); + ЧастиКоманды.Добавить(XMLСтрока(ПорогКоличестваПопытокПовторногоВыполнения)); + + Если СпособПовторногоВыполнения = Способы[1].Значение Тогда // Фиксировано + ЧастиКоманды.Добавить("--retry-delay"); + ЧастиКоманды.Добавить(XMLСтрока(ДлительностьПаузыПовторногоВыполнения)); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ЗаполнитьПользователяИПарольCurlКоманды(ЧастиКоманды) Если НЕ ЗначениеЗаполнено(ПользовательАутентификации) Тогда @@ -1736,10 +1813,11 @@ ОтобразитьPOST = Ложь; РазделыКоманды = Новый Структура( - "Аутентификация, Тело, Таймаут, Прокси, Сессия, Заголовки, Схема", - Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив + "ПовторноеВыполнение, Аутентификация, Тело, Таймаут, Прокси, Сессия, Заголовки, Схема", + Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив, Новый Массив ); + ЗаполнитьПовторноеВыполнениеCurlКоманды(РазделыКоманды.ПовторноеВыполнение); ЗаполнитьАутентификациюCurlКоманды(РазделыКоманды.Аутентификация); ЗаполнитьТелоЗапросаCurlКоманды(РазделыКоманды.Тело, ОтобразитьPOST, ПредопределенныеЗаголовки); ЗаполнитьТаймаутCurlКоманды(РазделыКоманды.Таймаут); @@ -1766,6 +1844,7 @@ ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Прокси); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Таймаут); ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.Сессия); + ЗаполнитьЧастиРазделаКомандыCurl(ЧастиКоманды, РазделыКоманды.ПовторноеВыполнение); Возврат СтрСоединить(ЧастиКоманды, " "); КонецФункции @@ -1801,6 +1880,8 @@ фРезультат.Вставить("--ntlm-wb", Ложь); фРезультат.Вставить("--oauth2-bearer", Истина); фРезультат.Вставить("--aws-sigv4", Истина); + фРезультат.Вставить("--retry", Истина); + фРезультат.Вставить("--retry-delay", Истина); фРезультат.Вставить("-L", Ложь); фРезультат.Вставить("--location", Ложь); фРезультат.Вставить("--location-trusted", Ложь); @@ -1969,13 +2050,14 @@ &НаКлиенте Функция НовыйОбъектДанныхCurl() Возврат Новый Структура( - "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, Аутентификация, Таймаут, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, ТолькоИмяФайла, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", + "Схема, ТолькоЗаголовки, Заголовки, ПоляФормы, ПоляHTMLФормы, ПоляКакПараметры, ПовторноеВыполнение, Аутентификация, Таймаут, ИспользоватьРедиректы, КоличествоРедиректов, ПоддержкаСжатогоОтвета, ИмяФайлаТелаОтвета, ТолькоИмяФайла, НормализоватьИдентификаторРесурса, Прокси, BasicАутентификацияПрокси", Неопределено, Ложь, Новый Массив, Новый Массив, Новый Массив, Ложь, + Новый Структура("Применить, Способ, НачальнаяДлительность, КоэфициентУвеличения, ПорогКоличестваПопыток, МаксимальнаяДлительность", Ложь, Элементы.СпособПовторногоВыполнения.СписокВыбора[0], -1, -1, -1, -1), Новый Структура("Тип, Пользователь, Пароль, Токен, РегионAWS, СервисAWS", Элементы.ТипАутентификации.СписокВыбора[0], "", "", "", "", ""), 0, Ложь, @@ -2208,6 +2290,36 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОбработатьПовторноеВыполнениеCurl(ДанныеИмпорта, Знач Опция) + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + ПорогКоличестваПопыток = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); + + ПВ = ДанныеИмпорта.ПовторноеВыполнение; + ПВ.ПорогКоличестваПопыток = ПорогКоличестваПопыток; + ПВ.Применить = ПорогКоличестваПопыток > 0; + + Если ПВ.Способ <> Элементы.СпособПовторногоВыполнения.СписокВыбора[0] Тогда // Разово + Возврат; + КонецЕсли; + + ПВ.Способ = Элементы.СпособПовторногоВыполнения.СписокВыбора[3]; // Экспоненциально + ПВ.НачальнаяДлительность = 1; + ПВ.КоэфициентУвеличения = 2; + ПВ.МаксимальнаяДлительность = Мин(КлиентHTTPПовтИсп.МаксимальноДопустимаяДлительностьПаузы(), Pow(2, ПорогКоличестваПопыток)); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьЗадержкуПовторногоВыполненияCurl(ДанныеИмпорта, Знач Опция) + ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); + НачальнаяДлительность = ОписаниеТипаЧисло.ПривестиЗначение(Опция.Значение); + + ПВ = ДанныеИмпорта.ПовторноеВыполнение; + ПВ.Способ = Элементы.СпособПовторногоВыполнения.СписокВыбора[1]; // Фиксировано + ПВ.НачальнаяДлительность = НачальнаяДлительность; + ПВ.МаксимальнаяДлительность = Макс(600, НачальнаяДлительность); +КонецПроцедуры + &НаКлиенте Процедура ОбработатьДанныеПрокси(ДанныеИмпорта, Знач Опция, Отказ, ОписаниеОшибки) ЗначениеОпции = Опция.Значение; @@ -2298,6 +2410,10 @@ ДанныеИмпорта.Аутентификация.Токен = Опция.Значение; ИначеЕсли ИмяОпции = "--aws-sigv4" Тогда ОбработатьДанныеАутентификацииAWSCurl(ДанныеИмпорта, Опция); + ИначеЕсли ИмяОпции = "--retry" Тогда + ОбработатьПовторноеВыполнениеCurl(ДанныеИмпорта, Опция); + ИначеЕсли ИмяОпции = "--retry-delay" Тогда + ОбработатьЗадержкуПовторногоВыполненияCurl(ДанныеИмпорта, Опция); ИначеЕсли ИмяОпции = "-L" ИЛИ ИмяОпции = "--location" ИЛИ ИмяОпции = "--location-trusted" Тогда ДанныеИмпорта.ИспользоватьРедиректы = Истина; ИначеЕсли ИмяОпции = "--max-redirs" Тогда @@ -2423,12 +2539,27 @@ КонецЕсли; Если ДанныеИмпорта.Схема = Неопределено Тогда - ДанныеИмпорта.Схема = Элементы.Схема.СписокВыбора[0].Значение; // GET + ДанныеИмпорта.Схема = Элементы.Схема.СписокВыбора[0]; // GET КонецЕсли; ИдентификаторРесурса = ЧастиКоманды.ИдентификаторРесурса; Схема = ДанныеИмпорта.Схема; + Если ДанныеИмпорта.ПовторноеВыполнение.Применить Тогда + ПВ = ДанныеИмпорта.ПовторноеВыполнение; + СпособПовторногоВыполнения = ПВ.Способ; + ДлительностьПаузыПовторногоВыполнения = ПВ.НачальнаяДлительность; + КоэффициентУвеличенияПаузыПовторногоВыполнения = ?(ПВ.КоэфициентУвеличения < 0, КоэффициентУвеличенияПаузыПовторногоВыполнения, ПВ.КоэфициентУвеличения); + ПорогКоличестваПопытокПовторногоВыполнения = ПВ.ПорогКоличестваПопыток; + МаксимальнаяДлительностьПаузыПовторногоВыполнения = ПВ.МаксимальнаяДлительность; + + КодыСостоянияОтветаПовторногоВыполнения.Очистить(); + КодыСостоянияОтветаПовторногоВыполнения.Добавить(КлиентHTTPПовтИсп.КодСостоянияТаймаутНаКлиенте()); + КодыСостоянияОтветаПовторногоВыполнения.Добавить(КлиентHTTPПовтИсп.КодСостоянияСлишкомМногоЗапросов()); + Иначе + СпособПовторногоВыполнения = Элементы.СпособПовторногоВыполнения.СписокВыбора[0]; + КонецЕсли; + ТипАутентификации = ДанныеИмпорта.Аутентификация.Тип.Значение; Если ТипАутентификации <> Элементы.ТипАутентификации.СписокВыбора[0].Значение Тогда СписокТиповАутентификации = Элементы.ТипАутентификации.СписокВыбора; @@ -2494,6 +2625,7 @@ ИдентификаторРесурсаПриИзменении(Неопределено); ТипАутентификацииПриИзменении(Неопределено); ТипТелаЗапросаПриИзменении(Неопределено); + СпособПовторногоВыполненияПриИзменении(Неопределено); ИспользоватьПроксиПриИзменении(Неопределено); Элементы.ГруппаРазделы.ТекущаяСтраница = Элементы.РазделЗапрос; @@ -2572,6 +2704,11 @@ Возврат Новый Структура("Текст, ЗаголовокФормы, ЦветРедактируемогоТекста", Текст, "Команда curl", WebЦвета.Серебряный); КонецФункции +&НаКлиенте +Функция МассивКодовСостоянияОтветаПовторногоВыполнения() + Возврат КодыСостоянияОтветаПовторногоВыполнения.ВыгрузитьЗначения(); +КонецФункции + &НаСервереБезКонтекста Функция РазделительПутиСервера() Возврат ПолучитьРазделительПутиСервера(); From 13d838e8f71fa9c6c8e1d0b69a5d72a161fd14ef Mon Sep 17 00:00:00 2001 From: SpaceHead1C <damh17@gmail.com> Date: Sun, 21 May 2023 22:53:29 +0300 Subject: [PATCH 19/20] =?UTF-8?q?fix:=20=D1=83=D1=87=D0=B8=D1=82=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D1=8E=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8=20=D0=B8=D0=BC=D0=BF=D0=BE?= =?UTF-8?q?=D1=80=D1=82=D0=B5=20=D0=B8=D0=B7=20Postman?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/Form/Module.bsl" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 23f4936..74dd153 100644 --- "a/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/v2/DataProcessors/\320\232\320\276\320\275\321\201\320\276\320\273\321\214\320\232\320\273\320\270\320\265\320\275\321\202\320\260HTTP/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -3264,7 +3264,7 @@ Для Каждого ЭлементЗаголовок Из Запрос["header"] Цикл фРезультат.Добавить(Новый Структура( "Активно, Ключ, Значение", - Истина, + ЭлементЗаголовок["disabled"] <> Истина, ЗначениеПеременнойИмпортаPostman(ЭлементЗаголовок["key"], ЗначенияШаблонов), ЗначениеПеременнойИмпортаPostman(ЭлементЗаголовок["value"], ЗначенияШаблонов) )); From 0c64177ecfcb298aa603ad74d5cd276c40e8e84c Mon Sep 17 00:00:00 2001 From: SpaceHead1C <damh17@gmail.com> Date: Mon, 22 May 2023 00:30:11 +0300 Subject: [PATCH 20/20] =?UTF-8?q?+=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v2/Configuration.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v2/Configuration.xml b/src/v2/Configuration.xml index a20f7e8..db5056f 100644 --- a/src/v2/Configuration.xml +++ b/src/v2/Configuration.xml @@ -50,7 +50,7 @@ <ScriptVariant>Russian</ScriptVariant> <DefaultRoles/> <Vendor>Брызгалин Андрей Васильевич (andrew.bryzgalin@gmail.com)</Vendor> - <Version>2.3.0</Version> + <Version>2.4.0</Version> <UpdateCatalogAddress>https://github.com/SpaceHead1C/1c_http/releases</UpdateCatalogAddress> <IncludeHelpInContents>false</IncludeHelpInContents> <UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>