From e636e411604af433f06814c8f578542b8bd0cfd0 Mon Sep 17 00:00:00 2001 From: Dmitry Ivanov Date: Fri, 21 Mar 2025 21:56:35 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=BE=D0=B2=20=D0=B2=20=D1=81=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC=20=D0=BA=D0=BE=D0=B4=D0=B5=20(#204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Классы/ГенераторПрограммногоКода1С.os | 8 +- .../ГенераторПрограммногоКодаКоннекторHTTP.os | 22 +- tests/ГенераторПрограммногоКода1С_test.os | 1221 ++++++++--------- ...нераторПрограммногоКодаКоннекторHTTP_test.os | 44 +- 4 files changed, 642 insertions(+), 653 deletions(-) diff --git a/src/core/Классы/ГенераторПрограммногоКода1С.os b/src/core/Классы/ГенераторПрограммногоКода1С.os index e5a83e3..16546c3 100644 --- a/src/core/Классы/ГенераторПрограммногоКода1С.os +++ b/src/core/Классы/ГенераторПрограммногоКода1С.os @@ -58,10 +58,10 @@ КодЛокализации); ОпределитьМетодУстановкиТелаЗапроса(); - ДобавитьРазделительДанныхMultipart(); - ДобавитьЗаголовки(); ДобавитьЧтениеФайлов(); ДобавитьДанныеЗапроса(); + ДобавитьРазделительДанныхMultipart(); + ДобавитьЗаголовки(); ДобавитьЗащищенноеСоединение(); ДобавитьПрокси(); ДобавитьЗапросы(); @@ -199,7 +199,9 @@ Возврат; КонецЕсли; - Конструктор.ДобавитьСтроку( + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку( "%1 = СтрЗаменить(Новый УникальныйИдентификатор, ""-"", """");", ИмяПараметраРазделительДанныхMultipart); diff --git a/src/core/Классы/ГенераторПрограммногоКодаКоннекторHTTP.os b/src/core/Классы/ГенераторПрограммногоКодаКоннекторHTTP.os index 6ae6505..0a7fa94 100644 --- a/src/core/Классы/ГенераторПрограммногоКодаКоннекторHTTP.os +++ b/src/core/Классы/ГенераторПрограммногоКодаКоннекторHTTP.os @@ -53,14 +53,14 @@ ПакетРесурсов = МенеджерРесурсовЛокализации.ПолучитьПакеты( "Общий, КлючевыеСловаЯзыка, ГенераторПрограммногоКодаКоннекторHTTP", КодЛокализации); - - ДобавитьЗаголовки(); - ДобавитьАутентификацию(); - ДобавитьПрокси(); + ДобавитьЧтениеФайлов(); ДобавитьДанныеЗапроса(); ДобавитьФайлы(); ДобавитьПараметрыЗапроса(); + ДобавитьЗаголовки(); + ДобавитьАутентификацию(); + ДобавитьПрокси(); ДобавитьЗапросы(); Результат = Конструктор.ПолучитьРезультат(); @@ -191,7 +191,9 @@ Состояние.ЕстьЗаголовки = Истина; - Конструктор.ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки); + Конструктор + .ДобавитьПустуюСтроку() + .ДобавитьСтроку("%1 = Новый Соответствие();", ИмяПараметраЗаголовки); Для Каждого Заголовок Из ОписаниеЗапроса.Заголовки Цикл @@ -203,10 +205,12 @@ ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Ключ)); ПараметрыФункции.Добавить(Конструктор.ПараметрВСтроку(Заголовок.Значение)); - Конструктор.ДобавитьСтроку( - "%1.Вставить(%2);", - ИмяПараметраЗаголовки, - Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции)); + Конструктор + .ДобавитьСтроку( + "%1.Вставить(%2);", + ИмяПараметраЗаголовки, + Конструктор.ПараметрыФункцииВСтроку(ПараметрыФункции) + ); КонецЦикла; diff --git a/tests/ГенераторПрограммногоКода1С_test.os b/tests/ГенераторПрограммногоКода1С_test.os index 1a8a588..647418e 100644 --- a/tests/ГенераторПрограммногоКода1С_test.os +++ b/tests/ГенераторПрограммногоКода1С_test.os @@ -157,9 +157,6 @@ ПрограммныйКод = "////////////////////////////////////////////// |// Команда #1. | - |Заголовки = Новый Соответствие(); - |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); - | |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """"); @@ -179,6 +176,9 @@ | + ""&"" + ТекстовыеДанныеФайла_2 | + ""&"" + ТекстовыеДанныеФайла_3; | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); + | |Соединение = Новый HTTPСоединение(""example1.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки); |HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); @@ -188,13 +188,13 @@ |////////////////////////////////////////////// |// Команда #2. | - |Заголовки = Новый Соответствие(); - |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); - | |ТелоЗапроса = ""{ || """"key"""": """"value"""" ||}""; | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); + | |Соединение = Новый HTTPСоединение(""example2.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки); |HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); @@ -212,10 +212,7 @@ | -d param=value \ | --data @path-to-file"; - ПрограммныйКод = "Заголовки = Новый Соответствие(); - |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); - | - |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file""); + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ПС, """"); |ТекстовыеДанныеФайла_1 = СтрЗаменить(ТекстовыеДанныеФайла_1, Символы.ВК, """"); @@ -223,6 +220,9 @@ |ТелоЗапроса = ""param=value"" | + ""&"" + ТекстовыеДанныеФайла_1; | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); + | |// Запрос 1. http://example1.com |Соединение = Новый HTTPСоединение(""example1.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки); @@ -266,10 +266,7 @@ | --data-binary @path-to-file1 \ | --data-binary @path-to-file2"; - ПрограммныйКод = "Заголовки = Новый Соответствие(); - |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); - | - |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1""); + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); | |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2""); @@ -278,6 +275,9 @@ |ТелоЗапроса = ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); + | |Соединение = Новый HTTPСоединение(""example.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки); |HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); @@ -431,10 +431,7 @@ | --data-urlencode name@file \ | --data-urlencode @fileonly"; - ПрограммныйКод = "Заголовки = Новый Соответствие(); - |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); - | - |ЧтениеТекста = Новый ЧтениеТекста(""file""); + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); |ТекстовыеДанныеФайла_1 = КодироватьСтроку(ТекстовыеДанныеФайла_1, СпособКодированияСтроки.КодировкаURL); | @@ -446,6 +443,9 @@ | + ""&name="" + ТекстовыеДанныеФайла_1 | + ""&"" + ТекстовыеДанныеФайла_2; | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/x-www-form-urlencoded""); + | |Соединение = Новый HTTPСоединение(""example.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки); |HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); @@ -1169,11 +1169,7 @@ КонсольнаяКоманда = "curl 'http://example.com' --json @path-to-file1 --json @path-to-file2"; - ПрограммныйКод = "Заголовки = Новый Соответствие(); - |Заголовки.Вставить(""Content-Type"", ""application/json""); - |Заголовки.Вставить(""Accept"", ""application/json""); - | - |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1""); + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file1""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); | |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file2""); @@ -1182,6 +1178,10 @@ |ТелоЗапроса = ТекстовыеДанныеФайла_1 | + ТекстовыеДанныеФайла_2; | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/json""); + |Заголовки.Вставить(""Accept"", ""application/json""); + | |Соединение = Новый HTTPСоединение(""example.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки); |HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); @@ -1239,16 +1239,16 @@ | --json '{""drink"": ""coffe"", ""size"": ' \ | --json @path-to-file"; - ПрограммныйКод = "Заголовки = Новый Соответствие(); - |Заголовки.Вставить(""Content-Type"", ""application/json""); - |Заголовки.Вставить(""Accept"", ""application/json""); - | - |ЧтениеТекста = Новый ЧтениеТекста(""path-to-file""); + ПрограммныйКод = "ЧтениеТекста = Новый ЧтениеТекста(""path-to-file""); |ТекстовыеДанныеФайла_1 = ЧтениеТекста.Прочитать(); | |ТелоЗапроса = ""{""""drink"""": """"coffe"""", """"size"""": "" | + ТекстовыеДанныеФайла_1; | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/json""); + |Заголовки.Вставить(""Accept"", ""application/json""); + | |Соединение = Новый HTTPСоединение(""example.com"", 80); |HTTPЗапрос = Новый HTTPЗапрос(""/"", Заголовки); |HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса); @@ -1568,597 +1568,580 @@ &Тест Процедура ТестДолжен_ПроверитьПроверитьПередачуДанныхMultipart() Экспорт - КонсольнаяКоманда = "curl http://example1.com/ -F name=John -F shoesize=11 - |curl http://example2.com/ -F profile=@portrait.jpg - |curl http://example3.com/ -F profile=@portrait.jpg --form brief=@file.pdf - |curl http://example4.com/ -F file=@part1 --form file=@part2 - |curl http://example5.com/ -F name=John -F profile=@portrait.jpg - |curl http://example6.com/ -F story=WonderWidgets are great""); |Данные[""slides""][1][""items""].Добавить(""Who buys WonderWidgets""); | + |Заголовки = Новый Соответствие(); + |Заголовки.Вставить(""Content-Type"", ""application/json""); + | |ДополнительныеПараметры = Новый Структура(); |ДополнительныеПараметры.Вставить(""Заголовки"", Заголовки); |ДополнительныеПараметры.Вставить(""Json"", Данные);