Skip to content

Commit a275bc2

Browse files
committed
Возможность указывать параметры записи JSON #5
1 parent a3ba731 commit a275bc2

File tree

3 files changed

+86
-9
lines changed

3 files changed

+86
-9
lines changed

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Описание.Имя("1connector")
2-
.Версия("1.0.3")
2+
.Версия("1.0.4")
33
.Автор("Vladimir Bondarevskiy")
44
.АдресАвтора("vbondarevsky@gmail.com")
55
.Описание("Коннектор: удобный HTTP-клиент для OScript")

src/internal/Модули/КоннекторHTTPСлужебный.os

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
Запрос.Вставить("Аутентификация", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Аутентификация", Новый Структура));
1616
Запрос.Вставить("Cookies", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "Cookies", Новый Массив));
1717
Запрос.Вставить("ПараметрыПреобразованияJSON", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыПреобразованияJSON", Неопределено));
18+
Запрос.Вставить("ПараметрыЗаписиJSON", ВыбратьЗначение(Неопределено, ДополнительныеПараметры, "ПараметрыЗаписиJSON", Неопределено));
1819

1920
ПодготовленныйЗапрос = ПодготовитьЗапрос(Сессия, Запрос);
2021

@@ -127,7 +128,13 @@
127128
ПодготовленныйЗапрос.Вставить("URL", ПодготовитьURL(Запрос.URL, ПараметрыЗапроса));
128129

129130
ПодготовитьCookies(ПодготовленныйЗапрос);
130-
ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Запрос.Данные, Запрос.Файлы, Запрос.Json, Запрос.ПараметрыПреобразованияJSON);
131+
ПодготовитьТелоЗапроса(
132+
ПодготовленныйЗапрос,
133+
Запрос.Данные,
134+
Запрос.Файлы,
135+
Запрос.Json,
136+
Запрос.ПараметрыПреобразованияJSON,
137+
Запрос.ПараметрыЗаписиJSON);
131138
ПодготовитьАутентификацию(ПодготовленныйЗапрос);
132139

133140
Возврат ПодготовленныйЗапрос;
@@ -393,7 +400,7 @@
393400

394401
КонецФункции
395402

396-
Процедура ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыПреобразованияJSON)
403+
Процедура ПодготовитьТелоЗапроса(ПодготовленныйЗапрос, Данные, Файлы, Json, ПараметрыПреобразованияJSON, ПараметрыЗаписиJSON)
397404

398405
HTTPЗапрос = Новый HTTPЗапрос;
399406
HTTPЗапрос.АдресРесурса = СобратьАдресРесурса(
@@ -412,7 +419,7 @@
412419
ИначеЕсли ЗначениеЗаполнено(Json) Тогда
413420
ContentType = "application/json";
414421
HTTPЗапрос.УстановитьТелоИзСтроки(
415-
ОбъектВJson(Json, ПараметрыПреобразованияJSON),
422+
ОбъектВJson(Json, ПараметрыПреобразованияJSON, ПараметрыЗаписиJSON),
416423
КодировкаТекста.UTF8,
417424
ИспользованиеByteOrderMark.НеИспользовать);
418425
КонецЕсли;
@@ -978,12 +985,25 @@
978985

979986
КонецФункции
980987

981-
Функция ОбъектВJson(Объект, ПараметрыПреобразования) Экспорт
988+
Функция ОбъектВJson(Объект, Знач ПараметрыПреобразования, Знач ПараметрыЗаписи) Экспорт
982989

983990
ПараметрыПреобразованияJSON = ДополнитьПараметрыПреобразованияJSON(ПараметрыПреобразования);
984991

992+
ПараметрыЗаписи = ДополнитьПараметрыЗаписиJSON(ПараметрыЗаписи);
993+
994+
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(
995+
ПараметрыЗаписи.ПереносСтрок,
996+
ПараметрыЗаписи.СимволыОтступа,
997+
ПараметрыЗаписи.ИспользоватьДвойныеКавычки,
998+
ПараметрыЗаписи.ЭкранированиеСимволов,
999+
ПараметрыЗаписи.ЭкранироватьУгловыеСкобки,
1000+
ПараметрыЗаписи.ЭкранироватьРазделителиСтрок,
1001+
ПараметрыЗаписи.ЭкранироватьАмперсанд,
1002+
ПараметрыЗаписи.ЭкранироватьОдинарныеКавычки,
1003+
ПараметрыЗаписи.ЭкранироватьСлеш);
1004+
9851005
ЗаписьJSON = Новый ЗаписьJSON;
986-
ЗаписьJSON.УстановитьСтроку();
1006+
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
9871007
ЗаписатьJSON(ЗаписьJSON, Объект);
9881008

9891009
Возврат ЗаписьJSON.Закрыть();
@@ -1023,6 +1043,21 @@
10231043

10241044
КонецФункции
10251045

1046+
Функция ДополнитьПараметрыЗаписиJSON(ПараметрыЗаписи)
1047+
1048+
ПараметрыЗаписиJSON = ПолучитьПараметрыЗаписиJSONПоУмолчанию();
1049+
Если ЗначениеЗаполнено(ПараметрыЗаписи) Тогда
1050+
Для Каждого Параметр Из ПараметрыЗаписи Цикл
1051+
Если ПараметрыЗаписиJSON.Свойство(Параметр.Ключ) Тогда
1052+
ПараметрыЗаписиJSON.Вставить(Параметр.Ключ, Параметр.Значение);
1053+
КонецЕсли;
1054+
КонецЦикла;
1055+
КонецЕсли;
1056+
1057+
Возврат ПараметрыЗаписиJSON;
1058+
1059+
КонецФункции
1060+
10261061
Функция РазбитьСтрокуПоСтроке(Знач Строка, Разделитель)
10271062

10281063
Результат = Новый Массив;
@@ -1057,4 +1092,21 @@
10571092

10581093
Возврат ПараметрыПреобразованияПоУмолчанию;
10591094

1095+
КонецФункции
1096+
1097+
Функция ПолучитьПараметрыЗаписиJSONПоУмолчанию()
1098+
1099+
ПараметрыЗаписиJSONПоУмолчанию = Новый Структура;
1100+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ПереносСтрок", ПереносСтрокJSON.Авто);
1101+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("СимволыОтступа", " ");
1102+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ИспользоватьДвойныеКавычки", Истина);
1103+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранированиеСимволов", ЭкранированиеСимволовJSON.Нет);
1104+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьУгловыеСкобки", Ложь);
1105+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьРазделителиСтрок", Истина);
1106+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьАмперсанд", Ложь);
1107+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьОдинарныеКавычки", Ложь);
1108+
ПараметрыЗаписиJSONПоУмолчанию.Вставить("ЭкранироватьСлеш", Ложь);
1109+
1110+
Возврат ПараметрыЗаписиJSONПоУмолчанию;
1111+
10601112
КонецФункции

tests/connector-test.os

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
Функция ПолучитьСписокТестов(МенеджерТестирования) Экспорт
55

66
МассивТестов = Новый Массив;
7+
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаютПараметрыЗаписиJson");
78
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаютЗапросыБезУказанияСхемыURL");
89
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаетПередачаПараметровВСтрокуЗапроса");
910
МассивТестов.Добавить("ТестДолжен_ПроверитьЧтоРаботаетПередачаПараметровВСтрокуЗапросаКомбинированный");
@@ -36,16 +37,40 @@
3637

3738
КонецФункции
3839

39-
Процедура ТестДолжен_ПроверитьЧтоРаботаютЗапросыБезУказанияСхемыURL() Экспорт
40+
Процедура ТестДолжен_ПроверитьЧтоРаботаютПараметрыЗаписиJson() Экспорт
41+
42+
ПараметрыЗаписиJSON = Новый Структура("ПереносСтрок", ПереносСтрокJSON.Нет);
43+
Json = Новый Структура;
44+
Json.Вставить("field", "value");
45+
Json.Вставить("field2", "value2");
46+
Результат = КоннекторHTTP.Post("http://httpbin.org/anything",, Json, Новый Структура("ПараметрыЗаписиJSON", ПараметрыЗаписиJSON)).Json();
47+
Ожидаем.Что(Результат["data"]).Равно("{""field"":""value"",""field2"":""value2""}");
48+
49+
КонецПроцедуры
4050

51+
Процедура ТестДолжен_ПроверитьЧтоРаботаютЗапросыБезУказанияСхемыURL() Экспорт
4152

53+
Результат = КоннекторHTTP.Get("httpbin.org/get").Json();
54+
Ожидаем.Что(Результат["url"]).Равно("http://httpbin.org/get");
4255

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

4558
Процедура ТестДолжен_ПроверитьЧтоРаботаетПередачаПараметровВСтрокуЗапроса() Экспорт
4659

47-
Результат = КоннекторHTTP.Get("httpbin.org/get").Json();
48-
Ожидаем.Что(Результат["url"]).Равно("http://httpbin.org/get");
60+
ПараметрыЗапроса = Новый Структура;
61+
ПараметрыЗапроса.Вставить("name", СтрРазделить("Иванов,Петров", ","));
62+
ПараметрыЗапроса.Вставить("salary", Формат(100000, "ЧГ="));
63+
64+
Ответ = КоннекторHTTP.Get("https://httpbin.org/anything/params", ПараметрыЗапроса);
65+
Результат = Ответ.Json();
66+
67+
Ожидаем.Что(Ответ.URL).Равно("https://httpbin.org/anything/params?name=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2&name=%D0%9F%D0%B5%D1%82%D1%80%D0%BE%D0%B2&salary=100000");
68+
Ожидаем.Что(Результат).ИмеетТип("Соответствие");
69+
Ожидаем.Что(Результат["url"]).Равно("https://httpbin.org/anything/params?name=Иванов&name=Петров&salary=100000");
70+
Ожидаем.Что(Результат["args"]).ИмеетТип("Соответствие");
71+
Ожидаем.Что(Результат["args"]["salary"]).Равно("100000");
72+
Ожидаем.Что(Результат["args"]["name"]).ИмеетТип("Массив");
73+
Ожидаем.Что(СтрСоединить(Результат["args"]["name"], ",")).Равно("Иванов,Петров");
4974

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

0 commit comments

Comments
 (0)