You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2026-06-20 09:19:27 +02:00
Main build (Jenkins)
This commit is contained in:
@@ -1682,9 +1682,13 @@ jobs:
|
||||
|
||||
|
||||
|
||||
- name: Основные тесты
|
||||
- name: Инициализация
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os "CLI_HTTP_ОсновныеТест"
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os "CLI_HTTP_Инициализация"
|
||||
|
||||
- name: Установка тела
|
||||
if: ${{ cancelled() }} == false
|
||||
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os "CLI_HTTP_УстановкаТела"
|
||||
|
||||
- name: Записать логи
|
||||
if: ${{ cancelled() }} == false
|
||||
|
||||
Vendored
+5
-1
@@ -790,7 +790,11 @@ pipeline {
|
||||
|
||||
|
||||
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
|
||||
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os" "CLI_HTTP_ОсновныеТест"'
|
||||
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os" "CLI_HTTP_Инициализация"'
|
||||
}
|
||||
|
||||
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
|
||||
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os" "CLI_HTTP_УстановкаТела"'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Vendored
+5
-1
@@ -790,7 +790,11 @@ pipeline {
|
||||
|
||||
|
||||
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
|
||||
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os" "HTTP_ОсновныеТест"'
|
||||
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os" "HTTP_Инициализация"'
|
||||
}
|
||||
|
||||
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
|
||||
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os" "HTTP_УстановкаТела"'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"URL": "https://httpbin.org"
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"URL": "https://httpbin.org",
|
||||
"Image": "https://api.athenaeum.digital/test_data/picture.jpg"
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"URL": "https://httpbin.org"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"URL": "https://httpbin.org"
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/get";
|
||||
|
||||
ParametersStructure = New Structure("param1,param2", "text", 10);
|
||||
|
||||
HTTPClient = OPI_HTTPRequests
|
||||
.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetURLParams(ParametersStructure)
|
||||
.ProcessRequest("GET");
|
||||
|
||||
Response = HTTPClient.ReturnResponseAsJSONObject();
|
||||
Log = HTTPClient.GetLog(True);
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/post";
|
||||
|
||||
Image = "https://api.athenaeum.digital/test_data/picture.jpg"; // URL, Path or Binary Data
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetBinaryBody(Image) // <---
|
||||
.ProcessRequest("POST")
|
||||
.ReturnResponseAsJSONObject();
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/post";
|
||||
|
||||
MIMEType = "text/markdown";
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetStringBody("# Hello world!")
|
||||
.SetDataType(MIMEType) // <---
|
||||
.ProcessRequest("POST")
|
||||
.ReturnResponseAsJSONObject();
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/get";
|
||||
|
||||
TFN = GetTempFileName();
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetResponseFile(TFN) // <---
|
||||
.ProcessRequest("GET")
|
||||
.ReturnResponseFilename();
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
Chat = "-1001971186208";
|
||||
Topic = "9201";
|
||||
Topic = "9245";
|
||||
|
||||
Result = OPI_Telegram.ClearThreadPinnedMessagesList(Token, Chat);
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
Chat = "-1001971186208";
|
||||
Topic = "9201";
|
||||
Topic = "9245";
|
||||
|
||||
Result = OPI_Telegram.CloseForumThread(Token, Chat); // Closes main topic
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
Chat = "-1001971186208";
|
||||
Topic = "9201";
|
||||
Topic = "9245";
|
||||
|
||||
Result = OPI_Telegram.DeleteForumTopic(Token, Chat, Topic);
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.DeleteMessage(Token, ChatID, MessageID);
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
FileID = "CQACAgIAAx0EcNsaZQACP5toAUu6TTtYbpD7en8NHfKBNYgZlQACGHoAArgXCUjlwAABQfx983M2BA";
|
||||
FileID = "CQACAgIAAx0EcNsaZQACP_poB9W0eWgicwaPb5m_YiqoSjUK9wACwG0AAvP4OUj5TydMOKyB8DYE";
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
|
||||
Result = OPI_Telegram.DownloadFile(Token, FileID);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
Chat = "-1001971186208";
|
||||
Topic = "9201";
|
||||
Topic = "9245";
|
||||
NewName = "NewTestTitle";
|
||||
NewIcon = "5310132165583840589";
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "461699897";
|
||||
ChannelID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.ForwardMessage(Token, MessageID, ChannelID, ChatID);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
Chat = "-1001971186208";
|
||||
Topic = "9201";
|
||||
Topic = "9245";
|
||||
|
||||
Result = OPI_Telegram.OpenForumThread(Token, Chat); // Opens main topic
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChannelID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.PinMessage(Token, ChannelID, MessageID);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "461699897";
|
||||
MessageID = "13078";
|
||||
MessageID = "13142";
|
||||
|
||||
Description = "New picture description";
|
||||
Result = OPI_Telegram.ReplaceMessageCaption(Token, ChatID, MessageID, Description);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "461699897";
|
||||
MessageID = "13075";
|
||||
MessageID = "13139";
|
||||
|
||||
ButtonArray = New Array;
|
||||
ButtonArray.Add("New button 3");
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
Text = "New message text";
|
||||
|
||||
Result = OPI_Telegram.ReplaceMessageText(Token, ChatID, MessageID, Text);
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChannelID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.UnpinMessage(Token, ChannelID, MessageID);
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ Method at API documentation: [pinChatMessage](https://core.telegram.org/bots/api
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChannelID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.PinMessage(Token, ChannelID, MessageID);
|
||||
```
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ Method at API documentation: [unpinChatMessage](https://core.telegram.org/bots/a
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChannelID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.UnpinMessage(Token, ChannelID, MessageID);
|
||||
```
|
||||
|
||||
@@ -30,7 +30,7 @@ Method at API documentation: [getFile](https://core.telegram.org/bots/api#getfil
|
||||
|
||||
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
FileID = "CQACAgIAAx0EcNsaZQACP5toAUu6TTtYbpD7en8NHfKBNYgZlQACGHoAArgXCUjlwAABQfx983M2BA";
|
||||
FileID = "CQACAgIAAx0EcNsaZQACP_poB9W0eWgicwaPb5m_YiqoSjUK9wACwG0AAvP4OUj5TydMOKyB8DYE";
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
|
||||
Result = OPI_Telegram.DownloadFile(Token, FileID);
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ Method at API documentation: [deleteMessage](https://core.telegram.org/bots/api#
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.DeleteMessage(Token, ChatID, MessageID);
|
||||
```
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ Method at API documentation: [forwardMessage](https://core.telegram.org/bots/api
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "461699897";
|
||||
ChannelID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
|
||||
Result = OPI_Telegram.ForwardMessage(Token, MessageID, ChannelID, ChatID);
|
||||
```
|
||||
|
||||
@@ -35,7 +35,7 @@ Method at API documentation: [editMessageCaption](https://core.telegram.org/bots
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "461699897";
|
||||
MessageID = "13078";
|
||||
MessageID = "13142";
|
||||
|
||||
Description = "New picture description";
|
||||
Result = OPI_Telegram.ReplaceMessageCaption(Token, ChatID, MessageID, Description);
|
||||
|
||||
@@ -34,7 +34,7 @@ Method at API documentation: [editMessageReplyMarkup](https://core.telegram.org/
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "461699897";
|
||||
MessageID = "13075";
|
||||
MessageID = "13139";
|
||||
|
||||
ButtonArray = New Array;
|
||||
ButtonArray.Add("New button 3");
|
||||
|
||||
@@ -35,7 +35,7 @@ Method at API documentation: [editMessageText](https://core.telegram.org/bots/ap
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
ChatID = "@testsichee";
|
||||
MessageID = "16274";
|
||||
MessageID = "16369";
|
||||
Text = "New message text";
|
||||
|
||||
Result = OPI_Telegram.ReplaceMessageText(Token, ChatID, MessageID, Text);
|
||||
|
||||
@@ -33,7 +33,7 @@ Method at API documentation: [deleteForumTopic](https://core.telegram.org/bots/a
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
Chat = "-1001971186208";
|
||||
Topic = "9201";
|
||||
Topic = "9245";
|
||||
|
||||
Result = OPI_Telegram.DeleteForumTopic(Token, Chat, Topic);
|
||||
```
|
||||
|
||||
@@ -35,7 +35,7 @@ Method at API documentation: [editForumTopic](https://core.telegram.org/bots/api
|
||||
```bsl title="1C:Enterprise/OneScript code example"
|
||||
Token = "6129457865:AAFyzNYOAFbu...";
|
||||
Chat = "-1001971186208";
|
||||
Topic = "9201";
|
||||
Topic = "9245";
|
||||
NewName = "NewTestTitle";
|
||||
NewIcon = "5310132165583840589";
|
||||
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"URL": "https://httpbin.org"
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"URL": "https://httpbin.org",
|
||||
"Картинка": "https://api.athenaeum.digital/test_data/picture.jpg"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"URL": "https://httpbin.org"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"URL": "https://httpbin.org"
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/get";
|
||||
|
||||
СтруктураПараметров = Новый Структура("param1,param2", "text", 10);
|
||||
|
||||
HTTPКлиент = OPI_ЗапросыHTTP
|
||||
.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьПараметрыURL(СтруктураПараметров)
|
||||
.ОбработатьЗапрос("GET");
|
||||
|
||||
Ответ = HTTPКлиент.ВернутьОтветКакJSONКоллекцию();
|
||||
Лог = HTTPКлиент.ПолучитьЛог(Истина);
|
||||
@@ -0,0 +1,10 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/post";
|
||||
|
||||
Картинка = "https://api.athenaeum.digital/test_data/picture.jpg"; // URL, Путь или Двоичные данные
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьДвоичноеТело(Картинка) // <---
|
||||
.ОбработатьЗапрос("POST")
|
||||
.ВернутьОтветКакJSONКоллекцию();
|
||||
@@ -0,0 +1,11 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/post";
|
||||
|
||||
ТипMIME = "text/markdown";
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьСтроковоеТело("# Привет мир!")
|
||||
.УстановитьТипДанных(ТипMIME) // <---
|
||||
.ОбработатьЗапрос("POST")
|
||||
.ВернутьОтветКакJSONКоллекцию();
|
||||
@@ -0,0 +1,10 @@
|
||||
URL = "https://httpbin.org";
|
||||
URL = URL + "/get";
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьФайлОтвета(ИВФ) // <---
|
||||
.ОбработатьЗапрос("GET")
|
||||
.ВернутьИмяФайлаТелаОтвета();
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDКанала = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.ЗакрепитьСообщение(Токен, IDКанала, IDСообщения);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат); // Закрывает главную тему
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "461699897";
|
||||
IDСообщения = "13075";
|
||||
IDСообщения = "13139";
|
||||
|
||||
МассивКнопок = Новый Массив;
|
||||
МассивКнопок.Добавить("Новая кнопка 1");
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "461699897";
|
||||
IDСообщения = "13078";
|
||||
IDСообщения = "13142";
|
||||
|
||||
Описание = "Новое описание картинки";
|
||||
Результат = OPI_Telegram.ЗаменитьОписаниеСообщения(Токен, IDЧата, IDСообщения, Описание);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
Текст = "Новый текст сообщения";
|
||||
|
||||
Результат = OPI_Telegram.ЗаменитьТекстСообщения(Токен, IDЧата, IDСообщения, Текст);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
НовоеИмя = "Новый тестовый заголовок";
|
||||
НовяИконка = "5310132165583840589";
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDКанала = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.ОткрепитьСообщение(Токен, IDКанала, IDСообщения);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат); // Открывает главную тему
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат);
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "461699897";
|
||||
IDКанала = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата);
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
IDФайла = "CQACAgIAAx0EcNsaZQACP5toAUu6TTtYbpD7en8NHfKBNYgZlQACGHoAArgXCUjlwAABQfx983M2BA";
|
||||
IDФайла = "CQACAgIAAx0EcNsaZQACP_poB9W0eWgicwaPb5m_YiqoSjUK9wACwG0AAvP4OUj5TydMOKyB8DYE";
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
|
||||
Результат = OPI_Telegram.СкачатьФайл(Токен, IDФайла);
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.УдалитьСообщение(Токен, IDЧата, IDСообщения);
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема);
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDКанала = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.ЗакрепитьСообщение(Токен, IDКанала, IDСообщения);
|
||||
```
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDКанала = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.ОткрепитьСообщение(Токен, IDКанала, IDСообщения);
|
||||
```
|
||||
|
||||
@@ -30,7 +30,7 @@ import TabItem from '@theme/TabItem';
|
||||
|
||||
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
IDФайла = "CQACAgIAAx0EcNsaZQACP5toAUu6TTtYbpD7en8NHfKBNYgZlQACGHoAArgXCUjlwAABQfx983M2BA";
|
||||
IDФайла = "CQACAgIAAx0EcNsaZQACP_poB9W0eWgicwaPb5m_YiqoSjUK9wACwG0AAvP4OUj5TydMOKyB8DYE";
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
|
||||
Результат = OPI_Telegram.СкачатьФайл(Токен, IDФайла);
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.УдалитьСообщение(Токен, IDЧата, IDСообщения);
|
||||
```
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ import TabItem from '@theme/TabItem';
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "461699897";
|
||||
IDКанала = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
|
||||
Результат = OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата);
|
||||
```
|
||||
|
||||
@@ -35,7 +35,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "461699897";
|
||||
IDСообщения = "13078";
|
||||
IDСообщения = "13142";
|
||||
|
||||
Описание = "Новое описание картинки";
|
||||
Результат = OPI_Telegram.ЗаменитьОписаниеСообщения(Токен, IDЧата, IDСообщения, Описание);
|
||||
|
||||
@@ -34,7 +34,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "461699897";
|
||||
IDСообщения = "13075";
|
||||
IDСообщения = "13139";
|
||||
|
||||
МассивКнопок = Новый Массив;
|
||||
МассивКнопок.Добавить("Новая кнопка 1");
|
||||
|
||||
@@ -35,7 +35,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
IDЧата = "@testsichee";
|
||||
IDСообщения = "16274";
|
||||
IDСообщения = "16369";
|
||||
Текст = "Новый текст сообщения";
|
||||
|
||||
Результат = OPI_Telegram.ЗаменитьТекстСообщения(Токен, IDЧата, IDСообщения, Текст);
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат);
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.ЗакрытьТемуФорума(Токен, Чат); // Закрывает главную тему
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема);
|
||||
```
|
||||
|
||||
@@ -35,7 +35,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
НовоеИмя = "Новый тестовый заголовок";
|
||||
НовяИконка = "5310132165583840589";
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ import TabItem from '@theme/TabItem';
|
||||
```bsl title="Пример использования для 1С:Предприятие/OneScript"
|
||||
Токен = "6129457865:AAFyzNYOAFbu...";
|
||||
Чат = "-1001971186208";
|
||||
Тема = "9201";
|
||||
Тема = "9245";
|
||||
|
||||
Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат); // Открывает главную тему
|
||||
|
||||
|
||||
Vendored
+7159
-7159
File diff suppressed because it is too large
Load Diff
+146
-1
@@ -2622,7 +2622,7 @@ EndProcedure
|
||||
|
||||
#Region HTTP
|
||||
|
||||
Procedure HTTP_MainTests() Export
|
||||
Procedure HTTP_Initialization() Export
|
||||
|
||||
TestParameters = New Structure;
|
||||
OPI_TestDataRetrieval.ParameterToCollection("HTTP_URL" , TestParameters);
|
||||
@@ -2630,6 +2630,19 @@ Procedure HTTP_MainTests() Export
|
||||
HTTPClient_Initialize(TestParameters);
|
||||
HTTPClient_SetURL(TestParameters);
|
||||
HTTPClient_SetURLParams(TestParameters);
|
||||
HTTPClient_SetResponseFile(TestParameters);
|
||||
HTTPClient_SetDataType(TestParameters);
|
||||
HTTPClient_GetLog(TestParameters);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTP_BodySet() Export
|
||||
|
||||
TestParameters = New Structure;
|
||||
OPI_TestDataRetrieval.ParameterToCollection("HTTP_URL", TestParameters);
|
||||
OPI_TestDataRetrieval.ParameterToCollection("Picture" , TestParameters);
|
||||
|
||||
HTTPClient_SetBinaryBody(TestParameters);
|
||||
|
||||
EndProcedure
|
||||
|
||||
@@ -21059,6 +21072,7 @@ Procedure HTTPClient_Initialize(FunctionParameters)
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
Try
|
||||
@@ -21116,6 +21130,7 @@ Procedure HTTPClient_SetURL(FunctionParameters)
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
Try
|
||||
@@ -21169,6 +21184,7 @@ Procedure HTTPClient_SetURLParams(FunctionParameters)
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
Address = "/get?param1=text¶m2=10";
|
||||
@@ -21317,6 +21333,135 @@ Procedure HTTPClient_SetURLParams(FunctionParameters)
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_SetResponseFile(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/get";
|
||||
|
||||
TFN = GetTempFileName();
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetResponseFile(TFN) // <---
|
||||
.ProcessRequest("GET")
|
||||
.ReturnResponseFilename();
|
||||
|
||||
// END
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SetResponseFile", "HTTPClient");
|
||||
|
||||
BodyFile = New File(TFN);
|
||||
BodyFileReturn = New File(Result);
|
||||
|
||||
OPI_TestDataRetrieval.ExpectsThat(TFN).Равно(Result);
|
||||
OPI_TestDataRetrieval.ExpectsThat(BodyFile.Size()).Равно(BodyFileReturn.Size());
|
||||
OPI_TestDataRetrieval.ExpectsThat(BodyFile.Size() > 0).Равно(True);
|
||||
|
||||
CheckResult = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize()
|
||||
.SetURL(URL)
|
||||
.SetResponseFile(TFN) // <---
|
||||
.ProcessRequest("GET")
|
||||
.ReturnResponseAsBinaryData();
|
||||
|
||||
OPI_TestDataRetrieval.ExpectsThat(BodyFile.Size()).Равно(CheckResult.Size());
|
||||
|
||||
CheckResultAsString = ПолучитьСтрокуИзДвоичныхДанных(CheckResult);
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(CheckResultAsString, "SetResponseFile (body)", "HTTPClient");
|
||||
OPI_TestDataRetrieval.ExpectsThat(OPI_Tools.JsonToStructure(CheckResultAsString)).ИмеетТип("Map");
|
||||
|
||||
Try
|
||||
DeleteFiles(TFN);
|
||||
Except
|
||||
OPI_TestDataRetrieval.WriteLog(ErrorDescription(), "File deletion error", "HTTPClient");
|
||||
EndTry;
|
||||
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_SetDataType(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
MIMEType = "text/markdown";
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetStringBody("# Hello world!")
|
||||
.SetDataType(MIMEType) // <---
|
||||
.ProcessRequest("POST")
|
||||
.ReturnResponseAsJSONObject();
|
||||
|
||||
// END
|
||||
|
||||
Try
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SetDataType", "HTTPClient");
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["headers"]["Content-Type"]).Равно(MIMEType);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_GetLog(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/get";
|
||||
|
||||
ParametersStructure = New Structure("param1,param2", "text", 10);
|
||||
|
||||
HTTPClient = OPI_HTTPRequests
|
||||
.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetURLParams(ParametersStructure)
|
||||
.ProcessRequest("GET");
|
||||
|
||||
Response = HTTPClient.ReturnResponseAsJSONObject();
|
||||
Log = HTTPClient.GetLog(True);
|
||||
|
||||
// END
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_SetBinaryBody(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
Image = FunctionParameters["Picture"]; // URL, Path or Binary Data
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetBinaryBody(Image) // <---
|
||||
.ProcessRequest("POST")
|
||||
.ReturnResponseAsJSONObject();
|
||||
|
||||
// END
|
||||
|
||||
Try
|
||||
Result["origin"] = "***";
|
||||
Result["data"] = "...";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SetBinaryBody", "HTTPClient");
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["headers"]["Content-Type"]).Равно("application/octet-stream");
|
||||
|
||||
OPI_TypeConversion.GetBinaryData(Image);
|
||||
|
||||
Size = Image.Size();
|
||||
OPI_TypeConversion.GetLine(Size);
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["headers"]["Content-Length"]).Равно(Size);
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
||||
|
||||
+2
-1
@@ -303,7 +303,8 @@ Function GetTestTable() Export
|
||||
NewTest(TestTable, "OLLM_RequestsProcessing" , "Requests processing" , Ollama);
|
||||
NewTest(TestTable, "OLLM_ModelsManagement" , "Models management" , Ollama);
|
||||
NewTest(TestTable, "OLLM_WorkingWithBlob" , "Working with Blob" , Ollama);
|
||||
NewTest(TestTable, "HTTP_MainTests" , "Main tests" , Http);
|
||||
NewTest(TestTable, "HTTP_Initialization" , "Initialization" , Http);
|
||||
NewTest(TestTable, "HTTP_BodySet" , "Body set" , Http);
|
||||
|
||||
Return TestTable;
|
||||
|
||||
|
||||
+119
-98
@@ -212,70 +212,6 @@ Function SetURLParams(Val Value) Export
|
||||
|
||||
EndFunction
|
||||
|
||||
// Set request object !NOCLI
|
||||
// Allows you to set a previously created HTTPRequest object for further work
|
||||
//
|
||||
// Note
|
||||
// You can get the request object using the `ReturnRequest` function
|
||||
//
|
||||
// Parameters:
|
||||
// Value - HTTPRequest - Request object - obj
|
||||
//
|
||||
// Returns:
|
||||
// DataProcessorObject.OPI_HTTPClient - This processor object
|
||||
Function SetRequestObject(Val Value) Export
|
||||
|
||||
Try
|
||||
|
||||
If StopExecution() Then Return ЭтотОбъект EndIf;
|
||||
|
||||
If TypeOf(Value) <> Type("HTTPRequest") Then
|
||||
Return Error("SetRequestObject: Not a request has been passed");
|
||||
Else
|
||||
AddLog("SetRequestObject: Setting the value");
|
||||
Request = Value;
|
||||
EndIf;
|
||||
|
||||
Return ЭтотОбъект;
|
||||
|
||||
Except
|
||||
Return Error(DetailErrorDescription(ErrorInfo()));
|
||||
EndTry;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Set connection object !NOCLI
|
||||
// Allows you to set a previously created HTTPConnection object for further work
|
||||
//
|
||||
// Note
|
||||
// You can get the request object using the `ReturnRequest` function
|
||||
//
|
||||
// Parameters:
|
||||
// Value - HTTPConnection - Connection object - obj
|
||||
//
|
||||
// Returns:
|
||||
// DataProcessorObject.OPI_HTTPClient - This processor object
|
||||
Function SetConnectionObject(Val Value) Export
|
||||
|
||||
Try
|
||||
|
||||
If StopExecution() Then Return ЭтотОбъект EndIf;
|
||||
|
||||
If TypeOf(Value) <> Type("HTTPConnection") Then
|
||||
Return Error("SetConnectionObject: Not a connection has been passed");
|
||||
Else
|
||||
AddLog("SetConnectionObject: Setting the value");
|
||||
Connection = Value;
|
||||
EndIf;
|
||||
|
||||
Return ЭтотОбъект;
|
||||
|
||||
Except
|
||||
Return Error(DetailErrorDescription(ErrorInfo()));
|
||||
EndTry;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Set response file
|
||||
// Sets the file path to save the query result
|
||||
//
|
||||
@@ -308,6 +244,9 @@ EndFunction
|
||||
// Set data type
|
||||
// Sets the Content-Type of the request
|
||||
//
|
||||
// Note
|
||||
// If the data type is not set manually, it will be matched during the process of setting the request body
|
||||
//
|
||||
// Parameters:
|
||||
// Value - String - ContentType header value - type
|
||||
//
|
||||
@@ -375,12 +314,14 @@ Function SetBinaryBody(Val Data, Val SetIfEmpty = False) Export
|
||||
CancelMultipartBody();
|
||||
|
||||
If Not RequestTypeSetManualy Then
|
||||
RequestDataType = "application/octet-stream";
|
||||
RequestDataType = "application/octet-stream";
|
||||
EndIf;
|
||||
|
||||
OPI_TypeConversion.GetBinaryData(Data, True, False);
|
||||
OPI_TypeConversion.GetBoolean(SetIfEmpty);
|
||||
|
||||
IsData = ValueIsFilled(Data);
|
||||
Data = ?(Data = Undefined, ПолучитьДвоичныеДанныеИзСтроки(""), Data);
|
||||
IsData = Data.Size() > 0;
|
||||
|
||||
If IsData Or SetIfEmpty Then
|
||||
|
||||
@@ -952,6 +893,8 @@ EndFunction
|
||||
// DataProcessorObject.OPI_HTTPClient, HTTPRequest, Undefined - The request or the same processing object
|
||||
Function ReturnRequest(Forced = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution() And Not Forced Then Return ЭтотОбъект EndIf;
|
||||
|
||||
Return Request;
|
||||
@@ -968,6 +911,8 @@ EndFunction
|
||||
// DataProcessorObject.OPI_HTTPClient, HTTPConnection, Undefined - Connection or the same processor object
|
||||
Function ReturnConnection(Forced = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution() And Not Forced Then Return ЭтотОбъект EndIf;
|
||||
|
||||
Return Connection;
|
||||
@@ -1014,21 +959,22 @@ Function ReturnResponseAsJSONObject(Val ToMap = True, Val ExceptionOnError = Fal
|
||||
|
||||
OPI_TypeConversion.GetBoolean(ToMap);
|
||||
|
||||
JSONBody = GetResponseBody();
|
||||
JSONStream = Response.GetBodyAsStream();
|
||||
|
||||
Try
|
||||
|
||||
JSONString = ПолучитьСтрокуИзДвоичныхДанных(JSONBody);
|
||||
|
||||
If ValueIsFilled(JSONString) Then
|
||||
JSON = OPI_Tools.JsonToStructure(JSONBody, ToMap);
|
||||
If JSONStream.Size() > 0 Then
|
||||
JSON = OPI_Tools.JsonToStructure(JSONStream, ToMap);
|
||||
Else
|
||||
JSON = New Map;
|
||||
EndIf;
|
||||
|
||||
Except
|
||||
|
||||
JSON = JSONBody;
|
||||
JSONStream.Goto(0, PositionInStream.Start);
|
||||
|
||||
DataReader = New DataReader(JSONStream);
|
||||
JSON = DataReader.Read().GetBinaryData();
|
||||
|
||||
EndTry;
|
||||
|
||||
@@ -1040,6 +986,69 @@ Function ReturnResponseAsJSONObject(Val ToMap = True, Val ExceptionOnError = Fal
|
||||
|
||||
EndFunction
|
||||
|
||||
// Return response as binary data
|
||||
// Returns the response body as binary data
|
||||
//
|
||||
// Parameters:
|
||||
// Forced - Boolean - False > The processor object will be returned instead of the response if there were errors in it - force
|
||||
// ExceptionOnError - Boolean - Causes an exception with a log if there were errors during processing - ex
|
||||
//
|
||||
// Returns:
|
||||
// Arbitrary - The response or the same processing object
|
||||
Function ReturnResponseAsBinaryData(Val Forced = False, Val ExceptionOnError = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution(ExceptionOnError) And Not Forced Then Return ЭтотОбъект EndIf;
|
||||
|
||||
BodyAsString = GetResponseBodyAsBinaryData();
|
||||
|
||||
Return BodyAsString;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Return response as string !NOCLI
|
||||
// Returns the body of the response as a string
|
||||
//
|
||||
// Parameters:
|
||||
// Forced - Boolean - False > The processor object will be returned instead of the response if there were errors in it - force
|
||||
// ExceptionOnError - Boolean - Causes an exception with a log if there were errors during processing - ex
|
||||
//
|
||||
// Returns:
|
||||
// Arbitrary - The response or the same processing object
|
||||
Function ReturnResponseAsString(Val Forced = False, Val ExceptionOnError = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution(ExceptionOnError) And Not Forced Then Return ЭтотОбъект EndIf;
|
||||
|
||||
BodyAsString = ПолучитьСтрокуИзДвоичныхДанных(GetResponseBodyAsBinaryData());
|
||||
|
||||
Return BodyAsString;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Return response filename !NOCLI
|
||||
// Returns the path to the response body file
|
||||
//
|
||||
// Parameters:
|
||||
// Forced - Boolean - False > The processor object will be returned instead of the response if there were errors in it - force
|
||||
// ExceptionOnError - Boolean - Causes an exception with a log if there were errors during processing - ex
|
||||
//
|
||||
// Returns:
|
||||
// Arbitrary - The response or the same processing object
|
||||
Function ReturnResponseFilename(Val Forced = False, Val ExceptionOnError = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution(ExceptionOnError) And Not Forced Then Return ЭтотОбъект EndIf;
|
||||
|
||||
BodyFileName = Response.GetBodyFileName();
|
||||
|
||||
Return BodyFileName;
|
||||
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
||||
@@ -1339,21 +1348,17 @@ Function CompleteHeaders()
|
||||
|
||||
AddLog("CompleteHeaders: Content-Length setting");
|
||||
|
||||
BodyFileName = Request.GetBodyFileName();
|
||||
If RequestBodyFile = Undefined Then
|
||||
|
||||
If BodyFileName = Undefined Then
|
||||
|
||||
CurrentBody = Request.ПолучитьТелоКакДвоичныеДанные();
|
||||
|
||||
If CurrentBody = Undefined Then
|
||||
If RequestBody = Undefined Then
|
||||
BodySize = 0;
|
||||
Else
|
||||
BodySize = CurrentBody.Size();
|
||||
BodySize = RequestBody.Size();
|
||||
EndIf;
|
||||
|
||||
Else
|
||||
|
||||
BodyFile = New File(BodyFileName);
|
||||
BodyFile = New File(RequestBodyFile);
|
||||
BodySize = BodyFile.Size();
|
||||
|
||||
EndIf;
|
||||
@@ -1432,10 +1437,10 @@ Function GetResponseBody()
|
||||
If NeedsUnpacking Then
|
||||
Data = UnpackResponse(Response);
|
||||
Else
|
||||
Data = Response.ПолучитьТелоКакДвоичныеДанные();
|
||||
Data = GetResponseBodyAsBinaryData();
|
||||
EndIf;
|
||||
|
||||
Data = ?(TypeOf(Data) = Type("HTTPResponse"), Data.ПолучитьТелоКакДвоичныеДанные(), Data);
|
||||
Data = ?(TypeOf(Data) = Type("HTTPResponse"), GetResponseBodyAsBinaryData(), Data);
|
||||
|
||||
If TypeOf(Data) = Type("BinaryData") Then
|
||||
|
||||
@@ -1463,6 +1468,36 @@ Function ThisIsRedirection(Val Response)
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetResponseBodyAsBinaryData()
|
||||
|
||||
BodyStream = Response.GetBodyAsStream();
|
||||
DataReader = New DataReader(BodyStream);
|
||||
ReadingResult = DataReader.Read();
|
||||
Data = ReadingResult.GetBinaryData();
|
||||
|
||||
DataReader.Close();
|
||||
BodyStream.Close();
|
||||
|
||||
Return Data;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetRequestBodyAsBinaryData()
|
||||
|
||||
If ValueIsFilled(RequestBodyFile) Then
|
||||
Data = New BinaryData(RequestBodyFile);
|
||||
Else
|
||||
Data = RequestBody;
|
||||
EndIf;
|
||||
|
||||
If Data = Undefined Then
|
||||
Data = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
EndIf;
|
||||
|
||||
Return Data;
|
||||
|
||||
EndFunction
|
||||
|
||||
Procedure CancelMultipartBody()
|
||||
|
||||
If Multipart Then
|
||||
@@ -1586,7 +1621,7 @@ EndProcedure
|
||||
Function UnpackResponse(Response)
|
||||
|
||||
Try
|
||||
Return ReadGZip(Response.ПолучитьТелоКакДвоичныеДанные());
|
||||
Return ReadGZip(GetResponseBodyAsBinaryData());
|
||||
Except
|
||||
Return Response;
|
||||
EndTry;
|
||||
@@ -1847,7 +1882,7 @@ EndFunction
|
||||
Function CreateCanonicalRequest()
|
||||
|
||||
RequestTemplate = "";
|
||||
RequestBody = GetRequestBody();
|
||||
RequestBody = GetRequestBodyAsBinaryData();
|
||||
HashSum = OPI_Cryptography.Hash(RequestBody, HashFunction.SHA256);
|
||||
PartsAmount = 6;
|
||||
|
||||
@@ -1945,20 +1980,6 @@ Function GetHeadersKeysString()
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetRequestBody()
|
||||
|
||||
Body = Request.ПолучитьТелоКакДвоичныеДанные();
|
||||
|
||||
If Body = Undefined Then
|
||||
|
||||
Body = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
|
||||
EndIf;
|
||||
|
||||
Return Body;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetURIString()
|
||||
|
||||
URI = Request.ResourceAddress;
|
||||
|
||||
+17
-6
@@ -234,14 +234,25 @@ EndFunction
|
||||
|
||||
Function JsonToStructure(Val Text, Val ToMap = True) Export
|
||||
|
||||
If Not ValueIsFilled(Text) Then
|
||||
Return "";
|
||||
JSONReader = New JSONReader;
|
||||
TextType = TypeOf(Text);
|
||||
|
||||
If TextType = Type("BinaryData") Then
|
||||
|
||||
Text = ПолучитьСтрокуИзДвоичныхДанных(Text);
|
||||
JSONReader.SetString(Text);
|
||||
|
||||
ElsIf TextType = Type("Stream") Or TextType = Type("MemoryStream") Or TextType = Type("FileStream") Then
|
||||
|
||||
JSONReader.OpenStream(Text);
|
||||
|
||||
Else
|
||||
|
||||
OPI_TypeConversion.GetLine(Text, True);
|
||||
JSONReader.SetString(Text);
|
||||
|
||||
EndIf;
|
||||
|
||||
Text = ?(TypeOf(Text) = Type("BinaryData"), ПолучитьСтрокуИзДвоичныхДанных(Text), Text);
|
||||
|
||||
JSONReader = New JSONReader;
|
||||
JSONReader.SetString(Text);
|
||||
|
||||
Data = ReadJSON(JSONReader, ToMap, Undefined, JSONDateFormat.ISO);
|
||||
JSONReader.Close();
|
||||
|
||||
@@ -303,7 +303,8 @@ Function GetTestTable() Export
|
||||
NewTest(TestTable, "OLLM_RequestsProcessing" , "Requests processing" , Ollama);
|
||||
NewTest(TestTable, "OLLM_ModelsManagement" , "Models management" , Ollama);
|
||||
NewTest(TestTable, "OLLM_WorkingWithBlob" , "Working with Blob" , Ollama);
|
||||
NewTest(TestTable, "HTTP_MainTests" , "Main tests" , Http);
|
||||
NewTest(TestTable, "HTTP_Initialization" , "Initialization" , Http);
|
||||
NewTest(TestTable, "HTTP_BodySet" , "Body set" , Http);
|
||||
|
||||
Return TestTable;
|
||||
|
||||
|
||||
+146
-1
@@ -2622,7 +2622,7 @@ EndProcedure
|
||||
|
||||
#Region HTTP
|
||||
|
||||
Procedure HTTP_MainTests() Export
|
||||
Procedure HTTP_Initialization() Export
|
||||
|
||||
TestParameters = New Structure;
|
||||
OPI_TestDataRetrieval.ParameterToCollection("HTTP_URL" , TestParameters);
|
||||
@@ -2630,6 +2630,19 @@ Procedure HTTP_MainTests() Export
|
||||
HTTPClient_Initialize(TestParameters);
|
||||
HTTPClient_SetURL(TestParameters);
|
||||
HTTPClient_SetURLParams(TestParameters);
|
||||
HTTPClient_SetResponseFile(TestParameters);
|
||||
HTTPClient_SetDataType(TestParameters);
|
||||
HTTPClient_GetLog(TestParameters);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTP_BodySet() Export
|
||||
|
||||
TestParameters = New Structure;
|
||||
OPI_TestDataRetrieval.ParameterToCollection("HTTP_URL", TestParameters);
|
||||
OPI_TestDataRetrieval.ParameterToCollection("Picture" , TestParameters);
|
||||
|
||||
HTTPClient_SetBinaryBody(TestParameters);
|
||||
|
||||
EndProcedure
|
||||
|
||||
@@ -21059,6 +21072,7 @@ Procedure HTTPClient_Initialize(FunctionParameters)
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
Try
|
||||
@@ -21116,6 +21130,7 @@ Procedure HTTPClient_SetURL(FunctionParameters)
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
Try
|
||||
@@ -21169,6 +21184,7 @@ Procedure HTTPClient_SetURLParams(FunctionParameters)
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
Address = "/get?param1=text¶m2=10";
|
||||
@@ -21317,6 +21333,135 @@ Procedure HTTPClient_SetURLParams(FunctionParameters)
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_SetResponseFile(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/get";
|
||||
|
||||
TFN = GetTempFileName();
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetResponseFile(TFN) // <---
|
||||
.ProcessRequest("GET")
|
||||
.ReturnResponseFilename();
|
||||
|
||||
// END
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SetResponseFile", "HTTPClient");
|
||||
|
||||
BodyFile = New File(TFN);
|
||||
BodyFileReturn = New File(Result);
|
||||
|
||||
OPI_TestDataRetrieval.ExpectsThat(TFN).Равно(Result);
|
||||
OPI_TestDataRetrieval.ExpectsThat(BodyFile.Size()).Равно(BodyFileReturn.Size());
|
||||
OPI_TestDataRetrieval.ExpectsThat(BodyFile.Size() > 0).Равно(True);
|
||||
|
||||
CheckResult = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize()
|
||||
.SetURL(URL)
|
||||
.SetResponseFile(TFN) // <---
|
||||
.ProcessRequest("GET")
|
||||
.ReturnResponseAsBinaryData();
|
||||
|
||||
OPI_TestDataRetrieval.ExpectsThat(BodyFile.Size()).Равно(CheckResult.Size());
|
||||
|
||||
CheckResultAsString = GetStringFromBinaryData(CheckResult);
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(CheckResultAsString, "SetResponseFile (body)", "HTTPClient");
|
||||
OPI_TestDataRetrieval.ExpectsThat(OPI_Tools.JsonToStructure(CheckResultAsString)).ИмеетТип("Map");
|
||||
|
||||
Try
|
||||
DeleteFiles(TFN);
|
||||
Except
|
||||
OPI_TestDataRetrieval.WriteLog(ErrorDescription(), "File deletion error", "HTTPClient");
|
||||
EndTry;
|
||||
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_SetDataType(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
MIMEType = "text/markdown";
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetStringBody("# Hello world!")
|
||||
.SetDataType(MIMEType) // <---
|
||||
.ProcessRequest("POST")
|
||||
.ReturnResponseAsJSONObject();
|
||||
|
||||
// END
|
||||
|
||||
Try
|
||||
Result["origin"] = "***";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SetDataType", "HTTPClient");
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["headers"]["Content-Type"]).Равно(MIMEType);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_GetLog(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/get";
|
||||
|
||||
ParametersStructure = New Structure("param1,param2", "text", 10);
|
||||
|
||||
HTTPClient = OPI_HTTPRequests
|
||||
.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetURLParams(ParametersStructure)
|
||||
.ProcessRequest("GET");
|
||||
|
||||
Response = HTTPClient.ReturnResponseAsJSONObject();
|
||||
Log = HTTPClient.GetLog(True);
|
||||
|
||||
// END
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure HTTPClient_SetBinaryBody(FunctionParameters)
|
||||
|
||||
URL = FunctionParameters["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
Image = FunctionParameters["Picture"]; // URL, Path or Binary Data
|
||||
|
||||
Result = OPI_HTTPRequests.NewRequest()
|
||||
.Initialize(URL)
|
||||
.SetBinaryBody(Image) // <---
|
||||
.ProcessRequest("POST")
|
||||
.ReturnResponseAsJSONObject();
|
||||
|
||||
// END
|
||||
|
||||
Try
|
||||
Result["origin"] = "***";
|
||||
Result["data"] = "...";
|
||||
Except
|
||||
Message("Cant replace origin");
|
||||
Message(Result.GetLog(True));
|
||||
EndTry;
|
||||
|
||||
OPI_TestDataRetrieval.WriteLog(Result, "SetBinaryBody", "HTTPClient");
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["headers"]["Content-Type"]).Равно("application/octet-stream");
|
||||
|
||||
OPI_TypeConversion.GetBinaryData(Image);
|
||||
|
||||
Size = Image.Size();
|
||||
OPI_TypeConversion.GetLine(Size);
|
||||
OPI_TestDataRetrieval.ExpectsThat(Result["headers"]["Content-Length"]).Равно(Size);
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
||||
|
||||
+17
-6
@@ -234,14 +234,25 @@ EndFunction
|
||||
|
||||
Function JsonToStructure(Val Text, Val ToMap = True) Export
|
||||
|
||||
If Not ValueIsFilled(Text) Then
|
||||
Return "";
|
||||
JSONReader = New JSONReader;
|
||||
TextType = TypeOf(Text);
|
||||
|
||||
If TextType = Type("BinaryData") Then
|
||||
|
||||
Text = GetStringFromBinaryData(Text);
|
||||
JSONReader.SetString(Text);
|
||||
|
||||
ElsIf TextType = Type("Stream") Or TextType = Type("MemoryStream") Or TextType = Type("FileStream") Then
|
||||
|
||||
JSONReader.OpenStream(Text);
|
||||
|
||||
Else
|
||||
|
||||
OPI_TypeConversion.GetLine(Text, True);
|
||||
JSONReader.SetString(Text);
|
||||
|
||||
EndIf;
|
||||
|
||||
Text = ?(TypeOf(Text) = Type("BinaryData"), GetStringFromBinaryData(Text), Text);
|
||||
|
||||
JSONReader = New JSONReader;
|
||||
JSONReader.SetString(Text);
|
||||
|
||||
Data = ReadJSON(JSONReader, ToMap, Undefined, JSONDateFormat.ISO);
|
||||
JSONReader.Close();
|
||||
|
||||
+1
-1
@@ -79,8 +79,8 @@
|
||||
<commonModules>CommonModule.OPI_AddIns</commonModules>
|
||||
<commonModules>CommonModule.OPI_Cryptography</commonModules>
|
||||
<commonModules>CommonModule.OPI_TestDataRetrieval</commonModules>
|
||||
<commonModules>CommonModule.OPI_Tests</commonModules>
|
||||
<commonModules>CommonModule.OPI_TypeConversion</commonModules>
|
||||
<commonModules>CommonModule.OPI_Tests</commonModules>
|
||||
<commonModules>CommonModule.OPI_TestsCLI</commonModules>
|
||||
<dataProcessors>DataProcessor.OPI_HTTPClient</dataProcessors>
|
||||
</mdclass:Configuration>
|
||||
|
||||
+119
-98
@@ -212,70 +212,6 @@ Function SetURLParams(Val Value) Export
|
||||
|
||||
EndFunction
|
||||
|
||||
// Set request object !NOCLI
|
||||
// Allows you to set a previously created HTTPRequest object for further work
|
||||
//
|
||||
// Note
|
||||
// You can get the request object using the `ReturnRequest` function
|
||||
//
|
||||
// Parameters:
|
||||
// Value - HTTPRequest - Request object - obj
|
||||
//
|
||||
// Returns:
|
||||
// DataProcessorObject.OPI_HTTPClient - This processor object
|
||||
Function SetRequestObject(Val Value) Export
|
||||
|
||||
Try
|
||||
|
||||
If StopExecution() Then Return ThisObject EndIf;
|
||||
|
||||
If TypeOf(Value) <> Type("HTTPRequest") Then
|
||||
Return Error("SetRequestObject: Not a request has been passed");
|
||||
Else
|
||||
AddLog("SetRequestObject: Setting the value");
|
||||
Request = Value;
|
||||
EndIf;
|
||||
|
||||
Return ThisObject;
|
||||
|
||||
Except
|
||||
Return Error(DetailErrorDescription(ErrorInfo()));
|
||||
EndTry;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Set connection object !NOCLI
|
||||
// Allows you to set a previously created HTTPConnection object for further work
|
||||
//
|
||||
// Note
|
||||
// You can get the request object using the `ReturnRequest` function
|
||||
//
|
||||
// Parameters:
|
||||
// Value - HTTPConnection - Connection object - obj
|
||||
//
|
||||
// Returns:
|
||||
// DataProcessorObject.OPI_HTTPClient - This processor object
|
||||
Function SetConnectionObject(Val Value) Export
|
||||
|
||||
Try
|
||||
|
||||
If StopExecution() Then Return ThisObject EndIf;
|
||||
|
||||
If TypeOf(Value) <> Type("HTTPConnection") Then
|
||||
Return Error("SetConnectionObject: Not a connection has been passed");
|
||||
Else
|
||||
AddLog("SetConnectionObject: Setting the value");
|
||||
Connection = Value;
|
||||
EndIf;
|
||||
|
||||
Return ThisObject;
|
||||
|
||||
Except
|
||||
Return Error(DetailErrorDescription(ErrorInfo()));
|
||||
EndTry;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Set response file
|
||||
// Sets the file path to save the query result
|
||||
//
|
||||
@@ -308,6 +244,9 @@ EndFunction
|
||||
// Set data type
|
||||
// Sets the Content-Type of the request
|
||||
//
|
||||
// Note
|
||||
// If the data type is not set manually, it will be matched during the process of setting the request body
|
||||
//
|
||||
// Parameters:
|
||||
// Value - String - ContentType header value - type
|
||||
//
|
||||
@@ -375,12 +314,14 @@ Function SetBinaryBody(Val Data, Val SetIfEmpty = False) Export
|
||||
CancelMultipartBody();
|
||||
|
||||
If Not RequestTypeSetManualy Then
|
||||
RequestDataType = "application/octet-stream";
|
||||
RequestDataType = "application/octet-stream";
|
||||
EndIf;
|
||||
|
||||
OPI_TypeConversion.GetBinaryData(Data, True, False);
|
||||
OPI_TypeConversion.GetBoolean(SetIfEmpty);
|
||||
|
||||
IsData = ValueIsFilled(Data);
|
||||
Data = ?(Data = Undefined, GetBinaryDataFromString(""), Data);
|
||||
IsData = Data.Size() > 0;
|
||||
|
||||
If IsData Or SetIfEmpty Then
|
||||
|
||||
@@ -952,6 +893,8 @@ EndFunction
|
||||
// DataProcessorObject.OPI_HTTPClient, HTTPRequest, Undefined - The request or the same processing object
|
||||
Function ReturnRequest(Forced = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution() And Not Forced Then Return ThisObject EndIf;
|
||||
|
||||
Return Request;
|
||||
@@ -968,6 +911,8 @@ EndFunction
|
||||
// DataProcessorObject.OPI_HTTPClient, HTTPConnection, Undefined - Connection or the same processor object
|
||||
Function ReturnConnection(Forced = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution() And Not Forced Then Return ThisObject EndIf;
|
||||
|
||||
Return Connection;
|
||||
@@ -1014,21 +959,22 @@ Function ReturnResponseAsJSONObject(Val ToMap = True, Val ExceptionOnError = Fal
|
||||
|
||||
OPI_TypeConversion.GetBoolean(ToMap);
|
||||
|
||||
JSONBody = GetResponseBody();
|
||||
JSONStream = Response.GetBodyAsStream();
|
||||
|
||||
Try
|
||||
|
||||
JSONString = GetStringFromBinaryData(JSONBody);
|
||||
|
||||
If ValueIsFilled(JSONString) Then
|
||||
JSON = OPI_Tools.JsonToStructure(JSONBody, ToMap);
|
||||
If JSONStream.Size() > 0 Then
|
||||
JSON = OPI_Tools.JsonToStructure(JSONStream, ToMap);
|
||||
Else
|
||||
JSON = New Map;
|
||||
EndIf;
|
||||
|
||||
Except
|
||||
|
||||
JSON = JSONBody;
|
||||
JSONStream.Goto(0, PositionInStream.Start);
|
||||
|
||||
DataReader = New DataReader(JSONStream);
|
||||
JSON = DataReader.Read().GetBinaryData();
|
||||
|
||||
EndTry;
|
||||
|
||||
@@ -1040,6 +986,69 @@ Function ReturnResponseAsJSONObject(Val ToMap = True, Val ExceptionOnError = Fal
|
||||
|
||||
EndFunction
|
||||
|
||||
// Return response as binary data
|
||||
// Returns the response body as binary data
|
||||
//
|
||||
// Parameters:
|
||||
// Forced - Boolean - False > The processor object will be returned instead of the response if there were errors in it - force
|
||||
// ExceptionOnError - Boolean - Causes an exception with a log if there were errors during processing - ex
|
||||
//
|
||||
// Returns:
|
||||
// Arbitrary - The response or the same processing object
|
||||
Function ReturnResponseAsBinaryData(Val Forced = False, Val ExceptionOnError = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution(ExceptionOnError) And Not Forced Then Return ThisObject EndIf;
|
||||
|
||||
BodyAsString = GetResponseBodyAsBinaryData();
|
||||
|
||||
Return BodyAsString;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Return response as string !NOCLI
|
||||
// Returns the body of the response as a string
|
||||
//
|
||||
// Parameters:
|
||||
// Forced - Boolean - False > The processor object will be returned instead of the response if there were errors in it - force
|
||||
// ExceptionOnError - Boolean - Causes an exception with a log if there were errors during processing - ex
|
||||
//
|
||||
// Returns:
|
||||
// Arbitrary - The response or the same processing object
|
||||
Function ReturnResponseAsString(Val Forced = False, Val ExceptionOnError = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution(ExceptionOnError) And Not Forced Then Return ThisObject EndIf;
|
||||
|
||||
BodyAsString = GetStringFromBinaryData(GetResponseBodyAsBinaryData());
|
||||
|
||||
Return BodyAsString;
|
||||
|
||||
EndFunction
|
||||
|
||||
// Return response filename !NOCLI
|
||||
// Returns the path to the response body file
|
||||
//
|
||||
// Parameters:
|
||||
// Forced - Boolean - False > The processor object will be returned instead of the response if there were errors in it - force
|
||||
// ExceptionOnError - Boolean - Causes an exception with a log if there were errors during processing - ex
|
||||
//
|
||||
// Returns:
|
||||
// Arbitrary - The response or the same processing object
|
||||
Function ReturnResponseFilename(Val Forced = False, Val ExceptionOnError = False) Export
|
||||
|
||||
OPI_TypeConversion.GetBoolean(Forced);
|
||||
|
||||
If StopExecution(ExceptionOnError) And Not Forced Then Return ThisObject EndIf;
|
||||
|
||||
BodyFileName = Response.GetBodyFileName();
|
||||
|
||||
Return BodyFileName;
|
||||
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
||||
@@ -1339,21 +1348,17 @@ Function CompleteHeaders()
|
||||
|
||||
AddLog("CompleteHeaders: Content-Length setting");
|
||||
|
||||
BodyFileName = Request.GetBodyFileName();
|
||||
If RequestBodyFile = Undefined Then
|
||||
|
||||
If BodyFileName = Undefined Then
|
||||
|
||||
CurrentBody = Request.GetBodyAsBinaryData();
|
||||
|
||||
If CurrentBody = Undefined Then
|
||||
If RequestBody = Undefined Then
|
||||
BodySize = 0;
|
||||
Else
|
||||
BodySize = CurrentBody.Size();
|
||||
BodySize = RequestBody.Size();
|
||||
EndIf;
|
||||
|
||||
Else
|
||||
|
||||
BodyFile = New File(BodyFileName);
|
||||
BodyFile = New File(RequestBodyFile);
|
||||
BodySize = BodyFile.Size();
|
||||
|
||||
EndIf;
|
||||
@@ -1432,10 +1437,10 @@ Function GetResponseBody()
|
||||
If NeedsUnpacking Then
|
||||
Data = UnpackResponse(Response);
|
||||
Else
|
||||
Data = Response.GetBodyAsBinaryData();
|
||||
Data = GetResponseBodyAsBinaryData();
|
||||
EndIf;
|
||||
|
||||
Data = ?(TypeOf(Data) = Type("HTTPResponse"), Data.GetBodyAsBinaryData(), Data);
|
||||
Data = ?(TypeOf(Data) = Type("HTTPResponse"), GetResponseBodyAsBinaryData(), Data);
|
||||
|
||||
If TypeOf(Data) = Type("BinaryData") Then
|
||||
|
||||
@@ -1463,6 +1468,36 @@ Function ThisIsRedirection(Val Response)
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetResponseBodyAsBinaryData()
|
||||
|
||||
BodyStream = Response.GetBodyAsStream();
|
||||
DataReader = New DataReader(BodyStream);
|
||||
ReadingResult = DataReader.Read();
|
||||
Data = ReadingResult.GetBinaryData();
|
||||
|
||||
DataReader.Close();
|
||||
BodyStream.Close();
|
||||
|
||||
Return Data;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetRequestBodyAsBinaryData()
|
||||
|
||||
If ValueIsFilled(RequestBodyFile) Then
|
||||
Data = New BinaryData(RequestBodyFile);
|
||||
Else
|
||||
Data = RequestBody;
|
||||
EndIf;
|
||||
|
||||
If Data = Undefined Then
|
||||
Data = GetBinaryDataFromString("");
|
||||
EndIf;
|
||||
|
||||
Return Data;
|
||||
|
||||
EndFunction
|
||||
|
||||
Procedure CancelMultipartBody()
|
||||
|
||||
If Multipart Then
|
||||
@@ -1586,7 +1621,7 @@ EndProcedure
|
||||
Function UnpackResponse(Response)
|
||||
|
||||
Try
|
||||
Return ReadGZip(Response.GetBodyAsBinaryData());
|
||||
Return ReadGZip(GetResponseBodyAsBinaryData());
|
||||
Except
|
||||
Return Response;
|
||||
EndTry;
|
||||
@@ -1847,7 +1882,7 @@ EndFunction
|
||||
Function CreateCanonicalRequest()
|
||||
|
||||
RequestTemplate = "";
|
||||
RequestBody = GetRequestBody();
|
||||
RequestBody = GetRequestBodyAsBinaryData();
|
||||
HashSum = OPI_Cryptography.Hash(RequestBody, HashFunction.SHA256);
|
||||
PartsAmount = 6;
|
||||
|
||||
@@ -1945,20 +1980,6 @@ Function GetHeadersKeysString()
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetRequestBody()
|
||||
|
||||
Body = Request.GetBodyAsBinaryData();
|
||||
|
||||
If Body = Undefined Then
|
||||
|
||||
Body = GetBinaryDataFromString("");
|
||||
|
||||
EndIf;
|
||||
|
||||
Return Body;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetURIString()
|
||||
|
||||
URI = Request.ResourceAddress;
|
||||
|
||||
+84
-84
@@ -2637,13 +2637,13 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTP_УстановкаТела() Экспорт
|
||||
|
||||
|
||||
ПараметрыТеста = Новый Структура;
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("HTTP_URL", ПараметрыТеста);
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture", ПараметрыТеста);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
||||
|
||||
HTTPКлиент_УстановитьДвоичноеТело(ПараметрыТеста);
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
@@ -21078,14 +21078,14 @@
|
||||
Попытка
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "Инициализировать", "HTTPКлиент");
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"].Количество()).Равно(0);
|
||||
|
||||
|
||||
HTTPКлиент = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.ОбработатьЗапрос("POST", Ложь);
|
||||
|
||||
|
||||
HTTPЗапрос = HTTPКлиент.ВернутьЗапрос();
|
||||
HTTPСоединение = HTTPКлиент.ВернутьСоединение();
|
||||
HTTPОтвет = HTTPКлиент.ВернутьОтвет();
|
||||
@@ -21134,17 +21134,17 @@
|
||||
КонецПопытки;
|
||||
|
||||
Попытка
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьURL", "HTTPКлиент");
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"].Количество()).Равно(0);
|
||||
|
||||
|
||||
HTTPКлиент = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать()
|
||||
.УстановитьURL(URL)
|
||||
.ОбработатьЗапрос("POST", Ложь);
|
||||
|
||||
|
||||
HTTPЗапрос = HTTPКлиент.ВернутьЗапрос();
|
||||
HTTPСоединение = HTTPКлиент.ВернутьСоединение();
|
||||
HTTPОтвет = HTTPКлиент.ВернутьОтвет();
|
||||
@@ -21170,7 +21170,7 @@
|
||||
URL = URL + "/get";
|
||||
|
||||
СтруктураПараметров = Новый Структура("param1,param2", "text", 10);
|
||||
|
||||
|
||||
Результат = OPI_ЗапросыHTTP
|
||||
.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
@@ -21189,7 +21189,7 @@
|
||||
|
||||
Адрес = "/get?param1=text¶m2=10";
|
||||
ПолныйURL = ПараметрыФункции["HTTP_URL"] + Адрес;
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьПараметрыURL", "HTTPКлиент");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
|
||||
@@ -21212,184 +21212,184 @@
|
||||
Сообщить(HTTPКлиент.ПолучитьЛог(Истина));
|
||||
ВызватьИсключение ОписаниеОшибки();
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
// Проверка кодировки
|
||||
|
||||
|
||||
// Комплексная
|
||||
|
||||
|
||||
СтруктураПараметров1 = Новый Структура;
|
||||
СтруктураПараметров1.Вставить("param1", "search?text");
|
||||
СтруктураПараметров1.Вставить("param2", "John Doe");
|
||||
СтруктураПараметров1.Вставить("param3", "value&another");
|
||||
СтруктураПараметров1.Вставить("param4", "кириллица");
|
||||
СтруктураПараметров1.Вставить("param5", "<script>alert('XSS')</script>");
|
||||
|
||||
|
||||
АдресРесурса1 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров1)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант1 = "/page?param1=search%3Ftext¶m2=John%20Doe¶m3=value%26another¶m4=%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0¶m5=%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса1).Равно(ПравильныйВариант1);
|
||||
|
||||
СтруктураПараметров2 = Новый Структура;
|
||||
СтруктураПараметров2.Вставить("param1", "search?text");
|
||||
СтруктураПараметров2.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
// Параметры в оригинальном URL
|
||||
|
||||
|
||||
АдресРесурса2 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page?existing=value")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров2)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант2 = "/page?existing=value¶m1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса2).Равно(ПравильныйВариант2);
|
||||
|
||||
|
||||
// Пустая строка параметров
|
||||
|
||||
|
||||
СтруктураПараметров3 = Новый Структура;
|
||||
СтруктураПараметров3.Вставить("param1", "search?text");
|
||||
СтруктураПараметров3.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса3 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page?")
|
||||
.УстановитьПараметрыURL(Структурапараметров3)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант3 = "/page?param1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса3).Равно(ПравильныйВариант3);
|
||||
|
||||
|
||||
// Спец. символы в пути
|
||||
|
||||
|
||||
СтруктураПараметров4 = Новый Структура;
|
||||
СтруктураПараметров4.Вставить("param1", "search?text");
|
||||
СтруктураПараметров4.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса4 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/path with spaces")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров4)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант4 = "/path%20with%20spaces?param1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса4).Равно(ПравильныйВариант4);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса4).Равно(ПравильныйВариант4);
|
||||
|
||||
// URL с фрагментом
|
||||
|
||||
|
||||
СтруктураПараметров5 = Новый Структура;
|
||||
СтруктураПараметров5.Вставить("param1", "search?text");
|
||||
СтруктураПараметров5.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса5 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page#section")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров5)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант5 = "/page?param1=search%3Ftext¶m2=John%20Doe#section";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса5).Равно(ПравильныйВариант5);
|
||||
|
||||
// Кирилица в пути
|
||||
|
||||
|
||||
СтруктураПараметров6 = Новый Структура;
|
||||
СтруктураПараметров6.Вставить("param1", "search?text");
|
||||
СтруктураПараметров6.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса6 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/путь")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров6)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант6 = "/%D0%BF%D1%83%D1%82%D1%8C?param1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса6).Равно(ПравильныйВариант6);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса6).Равно(ПравильныйВариант6);
|
||||
|
||||
// Несколько параметров и кодировка
|
||||
|
||||
|
||||
СтруктураПараметров7 = Новый Структура;
|
||||
СтруктураПараметров7.Вставить("param1", "value1");
|
||||
СтруктураПараметров7.Вставить("param2", "value two");
|
||||
Структурапараметров7.Вставить("param3", "value<three>");
|
||||
|
||||
|
||||
АдресРесурса7 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров7)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант7 = "/page?param1=value1¶m2=value%20two¶m3=value%3Cthree%3E";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса7).Равно(ПравильныйВариант7);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса7).Равно(ПравильныйВариант7);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_УстановитьФайлОтвета(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["HTTP_URL"];
|
||||
URL = URL + "/get";
|
||||
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.Инициализировать(URL)
|
||||
.УстановитьФайлОтвета(ИВФ) // <---
|
||||
.ОбработатьЗапрос("GET")
|
||||
.ВернутьИмяФайлаТелаОтвета();
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьФайлОтвета", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьФайлОтвета", "HTTPКлиент");
|
||||
|
||||
ФайлТела = Новый Файл(ИВФ);
|
||||
ФайлТелаВозврат = Новый Файл(Результат);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ИВФ).Равно(Результат);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(ФайлТелаВозврат.Размер());
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер() > 0).Равно(Истина);
|
||||
ФайлТела = Новый Файл(ИВФ);
|
||||
ФайлТелаВозврат = Новый Файл(Результат);
|
||||
|
||||
РезультатПроверки = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ИВФ).Равно(Результат);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(ФайлТелаВозврат.Размер());
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер() > 0).Равно(Истина);
|
||||
|
||||
РезультатПроверки = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать()
|
||||
.УстановитьURL(URL)
|
||||
.УстановитьURL(URL)
|
||||
.УстановитьФайлОтвета(ИВФ) // <---
|
||||
.ОбработатьЗапрос("GET")
|
||||
.ВернутьОтветКакДвоичныеДанные();
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(РезультатПроверки.Размер());
|
||||
|
||||
РезультатПроверкиСтрокой = ПолучитьСтрокуИзДвоичныхДанных(РезультатПроверки);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(РезультатПроверкиСтрокой, "УстановитьФайлОтвета (тело)", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(OPI_Инструменты.JsonВСтруктуру(РезультатПроверкиСтрокой)).ИмеетТип("Соответствие");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(РезультатПроверки.Размер());
|
||||
|
||||
РезультатПроверкиСтрокой = ПолучитьСтрокуИзДвоичныхДанных(РезультатПроверки);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(РезультатПроверкиСтрокой, "УстановитьФайлОтвета (тело)", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(OPI_Инструменты.JsonВСтруктуру(РезультатПроверкиСтрокой)).ИмеетТип("Соответствие");
|
||||
|
||||
Попытка
|
||||
УдалитьФайлы(ИВФ);
|
||||
Исключение
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла", "HTTPКлиент");
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_УстановитьТипДанных(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
|
||||
ТипMIME = "text/markdown";
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьСтроковоеТело("# Привет мир!")
|
||||
.Инициализировать(URL)
|
||||
.УстановитьСтроковоеТело("# Привет мир!")
|
||||
.УстановитьТипДанных(ТипMIME) // <---
|
||||
.ОбработатьЗапрос("POST")
|
||||
.ВернутьОтветКакJSONКоллекцию();
|
||||
@@ -21402,10 +21402,10 @@
|
||||
Сообщить("Не удалось заменить origin");
|
||||
Сообщить(Результат.ПолучитьЛог(Истина));
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьТипДанных", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно(ТипMIME);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно(ТипMIME);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_ПолучитьЛог(ПараметрыФункции)
|
||||
@@ -21414,29 +21414,29 @@
|
||||
URL = URL + "/get";
|
||||
|
||||
СтруктураПараметров = Новый Структура("param1,param2", "text", 10);
|
||||
|
||||
|
||||
HTTPКлиент = OPI_ЗапросыHTTP
|
||||
.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьПараметрыURL(СтруктураПараметров)
|
||||
.УстановитьПараметрыURL(СтруктураПараметров)
|
||||
.ОбработатьЗапрос("GET");
|
||||
|
||||
|
||||
Ответ = HTTPКлиент.ВернутьОтветКакJSONКоллекцию();
|
||||
Лог = HTTPКлиент.ПолучитьЛог(Истина);
|
||||
|
||||
// END
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_УстановитьДвоичноеТело(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
|
||||
Картинка = ПараметрыФункции["Picture"]; // URL, Путь или Двоичные данные
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.Инициализировать(URL)
|
||||
.УстановитьДвоичноеТело(Картинка) // <---
|
||||
.ОбработатьЗапрос("POST")
|
||||
.ВернутьОтветКакJSONКоллекцию();
|
||||
@@ -21445,21 +21445,21 @@
|
||||
|
||||
Попытка
|
||||
Результат["origin"] = "***";
|
||||
Результат["data"] = "...";
|
||||
Результат["data"] = "...";
|
||||
Исключение
|
||||
Сообщить("Не удалось заменить origin");
|
||||
Сообщить(Результат.ПолучитьЛог(Истина));
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьДвоичноеТело", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("application/octet-stream");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("application/octet-stream");
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);
|
||||
|
||||
Размер = Картинка.Размер();
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Размер);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Length"]).Равно(Размер);
|
||||
|
||||
|
||||
Размер = Картинка.Размер();
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Размер);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Length"]).Равно(Размер);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
+2
-2
@@ -2463,9 +2463,9 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
|
||||
|
||||
Модуль = Вычислить(Имя);
|
||||
|
||||
|
||||
Возврат Модуль;
|
||||
КонецФункции
|
||||
|
||||
|
||||
+49
-49
@@ -243,7 +243,7 @@
|
||||
|
||||
// Установить тип данных
|
||||
// Устанавливает Content-Type запроса
|
||||
//
|
||||
//
|
||||
// Примечание:
|
||||
// Если тип данных не установлен вручную, то он будет подобран в процессе установки тела запроса
|
||||
//
|
||||
@@ -320,7 +320,7 @@
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина, Ложь);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(УстанавливатьПустое);
|
||||
|
||||
Данные = ?(Данные = Неопределено, ПолучитьДвоичныеДанныеИзСтроки(""), Данные);
|
||||
Данные = ?(Данные = Неопределено, ПолучитьДвоичныеДанныеИзСтроки(""), Данные);
|
||||
ЕстьДанные = Данные.Размер() > 0;
|
||||
|
||||
Если ЕстьДанные Или УстанавливатьПустое Тогда
|
||||
@@ -894,7 +894,7 @@
|
||||
Функция ВернутьЗапрос(Принудительно = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
|
||||
Если ОстановитьРаботу() И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
Возврат Запрос;
|
||||
@@ -912,7 +912,7 @@
|
||||
Функция ВернутьСоединение(Принудительно = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
|
||||
Если ОстановитьРаботу() И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
Возврат Соединение;
|
||||
@@ -963,19 +963,19 @@
|
||||
|
||||
Попытка
|
||||
|
||||
Если ПотокJSON.Размер() > 0 Тогда
|
||||
Если ПотокJSON.Размер() > 0 Тогда
|
||||
JSON = OPI_Инструменты.JsonВСтруктуру(ПотокJSON, ВСоответствие);
|
||||
Иначе
|
||||
JSON = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
ПотокJSON.Перейти(0, ПозицияВПотоке.Начало);
|
||||
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокJSON);
|
||||
JSON = ЧтениеДанных.Прочитать().ПолучитьДвоичныеДанные();
|
||||
|
||||
|
||||
ПотокJSON.Перейти(0, ПозицияВПотоке.Начало);
|
||||
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокJSON);
|
||||
JSON = ЧтениеДанных.Прочитать().ПолучитьДвоичныеДанные();
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Возврат JSON;
|
||||
@@ -990,19 +990,19 @@
|
||||
// Возвращает тело ответа как двоичные данные
|
||||
//
|
||||
// Параметры:
|
||||
// ВСоответствие - Булево - Признак использования соответствия вместо структуры - map
|
||||
// Принудительно - Булево - Ложь > Вместо ответа будет возвращен объект обработки, если в ней были ошибки - force
|
||||
// ИсключениеПриОшибке - Булево - Вызывает исключение с логом, если во время обработки были ошибки - ex
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Ответ или этот же объект обработки
|
||||
Функция ВернутьОтветКакДвоичныеДанные(Знач Принудительно = Ложь, Знач ИсключениеПриОшибке = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
Если ОстановитьРаботу(ИсключениеПриОшибке) И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
ТелоСтрокой = ПолучитьТелоОтветаКакДвоичныеДанные();
|
||||
|
||||
ТелоСтрокой = ПолучитьТелоОтветаКакДвоичныеДанные();
|
||||
|
||||
Возврат ТелоСтрокой;
|
||||
|
||||
КонецФункции
|
||||
@@ -1011,7 +1011,7 @@
|
||||
// Возвращает тело ответа как строку
|
||||
//
|
||||
// Параметры:
|
||||
// ВСоответствие - Булево - Признак использования соответствия вместо структуры - map
|
||||
// Принудительно - Булево - Ложь > Вместо ответа будет возвращен объект обработки, если в ней были ошибки - force
|
||||
// ИсключениеПриОшибке - Булево - Вызывает исключение с логом, если во время обработки были ошибки - ex
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
@@ -1022,29 +1022,29 @@
|
||||
|
||||
Если ОстановитьРаботу(ИсключениеПриОшибке) И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
ТелоСтрокой = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьТелоОтветаКакДвоичныеДанные());
|
||||
|
||||
ТелоСтрокой = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьТелоОтветаКакДвоичныеДанные());
|
||||
|
||||
Возврат ТелоСтрокой;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Вернуть имя файла тела !NOCLI
|
||||
// Вернуть имя файла тела ответа !NOCLI
|
||||
// Возвращает путь к файлу тела ответа
|
||||
//
|
||||
// Параметры:
|
||||
// ВСоответствие - Булево - Признак использования соответствия вместо структуры - map
|
||||
// Принудительно - Булево - Ложь > Вместо ответа будет возвращен объект обработки, если в ней были ошибки - force
|
||||
// ИсключениеПриОшибке - Булево - Вызывает исключение с логом, если во время обработки были ошибки - ex
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Ответ или этот же объект обработки
|
||||
Функция ВернутьИмяФайлаТелаОтвета(Знач Принудительно = Ложь, Знач ИсключениеПриОшибке = Ложь) Экспорт
|
||||
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
Если ОстановитьРаботу(ИсключениеПриОшибке) И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
ИмяФайлаТела = Ответ.ПолучитьИмяФайлаТела();
|
||||
|
||||
ИмяФайлаТела = Ответ.ПолучитьИмяФайлаТела();
|
||||
|
||||
Возврат ИмяФайлаТела;
|
||||
|
||||
КонецФункции
|
||||
@@ -1469,33 +1469,33 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьТелоОтветаКакДвоичныеДанные()
|
||||
|
||||
ПотокТела = Ответ.ПолучитьТелоКакПоток();
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокТела);
|
||||
РезультатЧтения = ЧтениеДанных.Прочитать();
|
||||
Данные = РезультатЧтения.ПолучитьДвоичныеДанные();
|
||||
|
||||
ЧтениеДанных.Закрыть();
|
||||
ПотокТела.Закрыть();
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
|
||||
ПотокТела = Ответ.ПолучитьТелоКакПоток();
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокТела);
|
||||
РезультатЧтения = ЧтениеДанных.Прочитать();
|
||||
Данные = РезультатЧтения.ПолучитьДвоичныеДанные();
|
||||
|
||||
ЧтениеДанных.Закрыть();
|
||||
ПотокТела.Закрыть();
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьТелоЗапросаКакДвоичныеДанные()
|
||||
|
||||
Если ЗначениеЗаполнено(ЗапросФайлТела) Тогда
|
||||
Данные = Новый ДвоичныеДанные(ЗапросФайлТела);
|
||||
Иначе
|
||||
Данные = ЗапросТело;
|
||||
КонецЕсли;
|
||||
|
||||
Если Данные = Неопределено Тогда
|
||||
Данные = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
|
||||
Если ЗначениеЗаполнено(ЗапросФайлТела) Тогда
|
||||
Данные = Новый ДвоичныеДанные(ЗапросФайлТела);
|
||||
Иначе
|
||||
Данные = ЗапросТело;
|
||||
КонецЕсли;
|
||||
|
||||
Если Данные = Неопределено Тогда
|
||||
Данные = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОтменитьЗаписьMultipart()
|
||||
|
||||
+18
-18
@@ -233,26 +233,26 @@
|
||||
#Область JSON
|
||||
|
||||
Функция JsonВСтруктуру(Знач Текст, Знач ВСоответствие = Истина) Экспорт
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ТипТекста = ТипЗнч(Текст);
|
||||
|
||||
Если ТипТекста = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Текст = ПолучитьСтрокуИзДвоичныхДанных(Текст);
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ТипТекста = ТипЗнч(Текст);
|
||||
|
||||
Если ТипТекста = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Текст = ПолучитьСтрокуИзДвоичныхДанных(Текст);
|
||||
ЧтениеJSON.УстановитьСтроку(Текст);
|
||||
|
||||
ИначеЕсли ТипТекста = Тип("Поток") Или ТипТекста = Тип("ПотокВПамяти") Или ТипТекста = Тип("ФайловыйПоток") Тогда
|
||||
|
||||
ЧтениеJSON.ОткрытьПоток(Текст);
|
||||
|
||||
Иначе
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст, Истина);
|
||||
ЧтениеJSON.УстановитьСтроку(Текст);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ИначеЕсли ТипТекста = Тип("Поток") Или ТипТекста = Тип("ПотокВПамяти") Или ТипТекста = Тип("ФайловыйПоток") Тогда
|
||||
|
||||
ЧтениеJSON.ОткрытьПоток(Текст);
|
||||
|
||||
Иначе
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст, Истина);
|
||||
ЧтениеJSON.УстановитьСтроку(Текст);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Данные = ПрочитатьJSON(ЧтениеJSON, ВСоответствие, Неопределено, ФорматДатыJSON.ISO);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
|
||||
// OneScript: ./OInt/tools/Modules/internal/Modules/OPI_Инструменты.os
|
||||
|
||||
// MIT License
|
||||
|
||||
@@ -233,26 +233,26 @@
|
||||
#Область JSON
|
||||
|
||||
Функция JsonВСтруктуру(Знач Текст, Знач ВСоответствие = Истина) Экспорт
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ТипТекста = ТипЗнч(Текст);
|
||||
|
||||
Если ТипТекста = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Текст = ПолучитьСтрокуИзДвоичныхДанных(Текст);
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
ТипТекста = ТипЗнч(Текст);
|
||||
|
||||
Если ТипТекста = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Текст = ПолучитьСтрокуИзДвоичныхДанных(Текст);
|
||||
ЧтениеJSON.УстановитьСтроку(Текст);
|
||||
|
||||
ИначеЕсли ТипТекста = Тип("Поток") Или ТипТекста = Тип("ПотокВПамяти") Или ТипТекста = Тип("ФайловыйПоток") Тогда
|
||||
|
||||
ЧтениеJSON.ОткрытьПоток(Текст);
|
||||
|
||||
Иначе
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст, Истина);
|
||||
ЧтениеJSON.УстановитьСтроку(Текст);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
ИначеЕсли ТипТекста = Тип("Поток") Или ТипТекста = Тип("ПотокВПамяти") Или ТипТекста = Тип("ФайловыйПоток") Тогда
|
||||
|
||||
ЧтениеJSON.ОткрытьПоток(Текст);
|
||||
|
||||
Иначе
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст, Истина);
|
||||
ЧтениеJSON.УстановитьСтроку(Текст);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
||||
Данные = ПрочитатьJSON(ЧтениеJSON, ВСоответствие, Неопределено, ФорматДатыJSON.ISO);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
|
||||
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
|
||||
|
||||
// MIT License
|
||||
|
||||
|
||||
+85
-85
@@ -1,4 +1,4 @@
|
||||
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
|
||||
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
|
||||
|
||||
// MIT License
|
||||
|
||||
@@ -2637,13 +2637,13 @@
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTP_УстановкаТела() Экспорт
|
||||
|
||||
|
||||
ПараметрыТеста = Новый Структура;
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("HTTP_URL", ПараметрыТеста);
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture", ПараметрыТеста);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
||||
|
||||
HTTPКлиент_УстановитьДвоичноеТело(ПараметрыТеста);
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
@@ -21078,14 +21078,14 @@
|
||||
Попытка
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "Инициализировать", "HTTPКлиент");
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"].Количество()).Равно(0);
|
||||
|
||||
|
||||
HTTPКлиент = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.ОбработатьЗапрос("POST", Ложь);
|
||||
|
||||
|
||||
HTTPЗапрос = HTTPКлиент.ВернутьЗапрос();
|
||||
HTTPСоединение = HTTPКлиент.ВернутьСоединение();
|
||||
HTTPОтвет = HTTPКлиент.ВернутьОтвет();
|
||||
@@ -21134,17 +21134,17 @@
|
||||
КонецПопытки;
|
||||
|
||||
Попытка
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьURL", "HTTPКлиент");
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"].Количество()).Равно(0);
|
||||
|
||||
|
||||
HTTPКлиент = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать()
|
||||
.УстановитьURL(URL)
|
||||
.ОбработатьЗапрос("POST", Ложь);
|
||||
|
||||
|
||||
HTTPЗапрос = HTTPКлиент.ВернутьЗапрос();
|
||||
HTTPСоединение = HTTPКлиент.ВернутьСоединение();
|
||||
HTTPОтвет = HTTPКлиент.ВернутьОтвет();
|
||||
@@ -21170,7 +21170,7 @@
|
||||
URL = URL + "/get";
|
||||
|
||||
СтруктураПараметров = Новый Структура("param1,param2", "text", 10);
|
||||
|
||||
|
||||
Результат = OPI_ЗапросыHTTP
|
||||
.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
@@ -21189,7 +21189,7 @@
|
||||
|
||||
Адрес = "/get?param1=text¶m2=10";
|
||||
ПолныйURL = ПараметрыФункции["HTTP_URL"] + Адрес;
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьПараметрыURL", "HTTPКлиент");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["args"]).ИмеетТип("Соответствие");
|
||||
@@ -21212,184 +21212,184 @@
|
||||
Сообщить(HTTPКлиент.ПолучитьЛог(Истина));
|
||||
ВызватьИсключение ОписаниеОшибки();
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
// Проверка кодировки
|
||||
|
||||
|
||||
// Комплексная
|
||||
|
||||
|
||||
СтруктураПараметров1 = Новый Структура;
|
||||
СтруктураПараметров1.Вставить("param1", "search?text");
|
||||
СтруктураПараметров1.Вставить("param2", "John Doe");
|
||||
СтруктураПараметров1.Вставить("param3", "value&another");
|
||||
СтруктураПараметров1.Вставить("param4", "кириллица");
|
||||
СтруктураПараметров1.Вставить("param5", "<script>alert('XSS')</script>");
|
||||
|
||||
|
||||
АдресРесурса1 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров1)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант1 = "/page?param1=search%3Ftext¶m2=John%20Doe¶m3=value%26another¶m4=%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0¶m5=%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса1).Равно(ПравильныйВариант1);
|
||||
|
||||
СтруктураПараметров2 = Новый Структура;
|
||||
СтруктураПараметров2.Вставить("param1", "search?text");
|
||||
СтруктураПараметров2.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
// Параметры в оригинальном URL
|
||||
|
||||
|
||||
АдресРесурса2 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page?existing=value")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров2)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант2 = "/page?existing=value¶m1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса2).Равно(ПравильныйВариант2);
|
||||
|
||||
|
||||
// Пустая строка параметров
|
||||
|
||||
|
||||
СтруктураПараметров3 = Новый Структура;
|
||||
СтруктураПараметров3.Вставить("param1", "search?text");
|
||||
СтруктураПараметров3.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса3 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page?")
|
||||
.УстановитьПараметрыURL(Структурапараметров3)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант3 = "/page?param1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса3).Равно(ПравильныйВариант3);
|
||||
|
||||
|
||||
// Спец. символы в пути
|
||||
|
||||
|
||||
СтруктураПараметров4 = Новый Структура;
|
||||
СтруктураПараметров4.Вставить("param1", "search?text");
|
||||
СтруктураПараметров4.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса4 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/path with spaces")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров4)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант4 = "/path%20with%20spaces?param1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса4).Равно(ПравильныйВариант4);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса4).Равно(ПравильныйВариант4);
|
||||
|
||||
// URL с фрагментом
|
||||
|
||||
|
||||
СтруктураПараметров5 = Новый Структура;
|
||||
СтруктураПараметров5.Вставить("param1", "search?text");
|
||||
СтруктураПараметров5.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса5 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page#section")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров5)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант5 = "/page?param1=search%3Ftext¶m2=John%20Doe#section";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса5).Равно(ПравильныйВариант5);
|
||||
|
||||
// Кирилица в пути
|
||||
|
||||
|
||||
СтруктураПараметров6 = Новый Структура;
|
||||
СтруктураПараметров6.Вставить("param1", "search?text");
|
||||
СтруктураПараметров6.Вставить("param2", "John Doe");
|
||||
|
||||
|
||||
АдресРесурса6 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/путь")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров6)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант6 = "/%D0%BF%D1%83%D1%82%D1%8C?param1=search%3Ftext¶m2=John%20Doe";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса6).Равно(ПравильныйВариант6);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса6).Равно(ПравильныйВариант6);
|
||||
|
||||
// Несколько параметров и кодировка
|
||||
|
||||
|
||||
СтруктураПараметров7 = Новый Структура;
|
||||
СтруктураПараметров7.Вставить("param1", "value1");
|
||||
СтруктураПараметров7.Вставить("param2", "value two");
|
||||
Структурапараметров7.Вставить("param3", "value<three>");
|
||||
|
||||
|
||||
АдресРесурса7 = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать("https://example.com/page")
|
||||
.УстановитьПараметрыURL(СтруктураПараметров7)
|
||||
.ОбработатьЗапрос("GET", Ложь)
|
||||
.ВернутьЗапрос()
|
||||
.АдресРесурса;
|
||||
|
||||
|
||||
ПравильныйВариант7 = "/page?param1=value1¶m2=value%20two¶m3=value%3Cthree%3E";
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса7).Равно(ПравильныйВариант7);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(АдресРесурса7).Равно(ПравильныйВариант7);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_УстановитьФайлОтвета(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["HTTP_URL"];
|
||||
URL = URL + "/get";
|
||||
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.Инициализировать(URL)
|
||||
.УстановитьФайлОтвета(ИВФ) // <---
|
||||
.ОбработатьЗапрос("GET")
|
||||
.ВернутьИмяФайлаТелаОтвета();
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьФайлОтвета", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьФайлОтвета", "HTTPКлиент");
|
||||
|
||||
ФайлТела = Новый Файл(ИВФ);
|
||||
ФайлТелаВозврат = Новый Файл(Результат);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ИВФ).Равно(Результат);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(ФайлТелаВозврат.Размер());
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер() > 0).Равно(Истина);
|
||||
ФайлТела = Новый Файл(ИВФ);
|
||||
ФайлТелаВозврат = Новый Файл(Результат);
|
||||
|
||||
РезультатПроверки = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ИВФ).Равно(Результат);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(ФайлТелаВозврат.Размер());
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер() > 0).Равно(Истина);
|
||||
|
||||
РезультатПроверки = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать()
|
||||
.УстановитьURL(URL)
|
||||
.УстановитьURL(URL)
|
||||
.УстановитьФайлОтвета(ИВФ) // <---
|
||||
.ОбработатьЗапрос("GET")
|
||||
.ВернутьОтветКакДвоичныеДанные();
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(РезультатПроверки.Размер());
|
||||
|
||||
РезультатПроверкиСтрокой = ПолучитьСтрокуИзДвоичныхДанных(РезультатПроверки);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(РезультатПроверкиСтрокой, "УстановитьФайлОтвета (тело)", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(OPI_Инструменты.JsonВСтруктуру(РезультатПроверкиСтрокой)).ИмеетТип("Соответствие");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(ФайлТела.Размер()).Равно(РезультатПроверки.Размер());
|
||||
|
||||
РезультатПроверкиСтрокой = ПолучитьСтрокуИзДвоичныхДанных(РезультатПроверки);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(РезультатПроверкиСтрокой, "УстановитьФайлОтвета (тело)", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(OPI_Инструменты.JsonВСтруктуру(РезультатПроверкиСтрокой)).ИмеетТип("Соответствие");
|
||||
|
||||
Попытка
|
||||
УдалитьФайлы(ИВФ);
|
||||
Исключение
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(ОписаниеОшибки(), "Ошибка удаления файла", "HTTPКлиент");
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_УстановитьТипДанных(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
|
||||
ТипMIME = "text/markdown";
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьСтроковоеТело("# Привет мир!")
|
||||
.Инициализировать(URL)
|
||||
.УстановитьСтроковоеТело("# Привет мир!")
|
||||
.УстановитьТипДанных(ТипMIME) // <---
|
||||
.ОбработатьЗапрос("POST")
|
||||
.ВернутьОтветКакJSONКоллекцию();
|
||||
@@ -21402,10 +21402,10 @@
|
||||
Сообщить("Не удалось заменить origin");
|
||||
Сообщить(Результат.ПолучитьЛог(Истина));
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьТипДанных", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно(ТипMIME);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно(ТипMIME);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_ПолучитьЛог(ПараметрыФункции)
|
||||
@@ -21414,29 +21414,29 @@
|
||||
URL = URL + "/get";
|
||||
|
||||
СтруктураПараметров = Новый Структура("param1,param2", "text", 10);
|
||||
|
||||
|
||||
HTTPКлиент = OPI_ЗапросыHTTP
|
||||
.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.УстановитьПараметрыURL(СтруктураПараметров)
|
||||
.УстановитьПараметрыURL(СтруктураПараметров)
|
||||
.ОбработатьЗапрос("GET");
|
||||
|
||||
|
||||
Ответ = HTTPКлиент.ВернутьОтветКакJSONКоллекцию();
|
||||
Лог = HTTPКлиент.ПолучитьЛог(Истина);
|
||||
|
||||
// END
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура HTTPКлиент_УстановитьДвоичноеТело(ПараметрыФункции)
|
||||
|
||||
URL = ПараметрыФункции["HTTP_URL"];
|
||||
URL = URL + "/post";
|
||||
|
||||
|
||||
Картинка = ПараметрыФункции["Picture"]; // URL, Путь или Двоичные данные
|
||||
|
||||
Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
|
||||
.Инициализировать(URL)
|
||||
.Инициализировать(URL)
|
||||
.УстановитьДвоичноеТело(Картинка) // <---
|
||||
.ОбработатьЗапрос("POST")
|
||||
.ВернутьОтветКакJSONКоллекцию();
|
||||
@@ -21445,21 +21445,21 @@
|
||||
|
||||
Попытка
|
||||
Результат["origin"] = "***";
|
||||
Результат["data"] = "...";
|
||||
Результат["data"] = "...";
|
||||
Исключение
|
||||
Сообщить("Не удалось заменить origin");
|
||||
Сообщить(Результат.ПолучитьЛог(Истина));
|
||||
КонецПопытки;
|
||||
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УстановитьДвоичноеТело", "HTTPКлиент");
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("application/octet-stream");
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Type"]).Равно("application/octet-stream");
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка);
|
||||
|
||||
Размер = Картинка.Размер();
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Размер);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Length"]).Равно(Размер);
|
||||
|
||||
|
||||
Размер = Картинка.Размер();
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Размер);
|
||||
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["headers"]["Content-Length"]).Равно(Размер);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
@@ -1 +1 @@
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// OneScript: ./OInt/tools/Modules/internal/Classes/OPI_HTTPКлиент.os
|
||||
// OneScript: ./OInt/tools/Modules/internal/Classes/OPI_HTTPКлиент.os
|
||||
|
||||
// MIT License
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
|
||||
// Установить тип данных
|
||||
// Устанавливает Content-Type запроса
|
||||
//
|
||||
//
|
||||
// Примечание:
|
||||
// Если тип данных не установлен вручную, то он будет подобран в процессе установки тела запроса
|
||||
//
|
||||
@@ -320,7 +320,7 @@
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина, Ложь);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(УстанавливатьПустое);
|
||||
|
||||
Данные = ?(Данные = Неопределено, ПолучитьДвоичныеДанныеИзСтроки(""), Данные);
|
||||
Данные = ?(Данные = Неопределено, ПолучитьДвоичныеДанныеИзСтроки(""), Данные);
|
||||
ЕстьДанные = Данные.Размер() > 0;
|
||||
|
||||
Если ЕстьДанные Или УстанавливатьПустое Тогда
|
||||
@@ -894,7 +894,7 @@
|
||||
Функция ВернутьЗапрос(Принудительно = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
|
||||
Если ОстановитьРаботу() И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
Возврат Запрос;
|
||||
@@ -912,7 +912,7 @@
|
||||
Функция ВернутьСоединение(Принудительно = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
|
||||
Если ОстановитьРаботу() И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
Возврат Соединение;
|
||||
@@ -963,19 +963,19 @@
|
||||
|
||||
Попытка
|
||||
|
||||
Если ПотокJSON.Размер() > 0 Тогда
|
||||
Если ПотокJSON.Размер() > 0 Тогда
|
||||
JSON = OPI_Инструменты.JsonВСтруктуру(ПотокJSON, ВСоответствие);
|
||||
Иначе
|
||||
JSON = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
ПотокJSON.Перейти(0, ПозицияВПотоке.Начало);
|
||||
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокJSON);
|
||||
JSON = ЧтениеДанных.Прочитать().ПолучитьДвоичныеДанные();
|
||||
|
||||
|
||||
ПотокJSON.Перейти(0, ПозицияВПотоке.Начало);
|
||||
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокJSON);
|
||||
JSON = ЧтениеДанных.Прочитать().ПолучитьДвоичныеДанные();
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Возврат JSON;
|
||||
@@ -996,13 +996,13 @@
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Ответ или этот же объект обработки
|
||||
Функция ВернутьОтветКакДвоичныеДанные(Знач Принудительно = Ложь, Знач ИсключениеПриОшибке = Ложь) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
Если ОстановитьРаботу(ИсключениеПриОшибке) И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
ТелоСтрокой = ПолучитьТелоОтветаКакДвоичныеДанные();
|
||||
|
||||
ТелоСтрокой = ПолучитьТелоОтветаКакДвоичныеДанные();
|
||||
|
||||
Возврат ТелоСтрокой;
|
||||
|
||||
КонецФункции
|
||||
@@ -1022,10 +1022,10 @@
|
||||
|
||||
Если ОстановитьРаботу(ИсключениеПриОшибке) И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
ТелоСтрокой = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьТелоОтветаКакДвоичныеДанные());
|
||||
|
||||
ТелоСтрокой = ПолучитьСтрокуИзДвоичныхДанных(ПолучитьТелоОтветаКакДвоичныеДанные());
|
||||
|
||||
Возврат ТелоСтрокой;
|
||||
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Вернуть имя файла тела ответа !NOCLI
|
||||
@@ -1038,13 +1038,13 @@
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Ответ или этот же объект обработки
|
||||
Функция ВернутьИмяФайлаТелаОтвета(Знач Принудительно = Ложь, Знач ИсключениеПриОшибке = Ложь) Экспорт
|
||||
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Принудительно);
|
||||
|
||||
Если ОстановитьРаботу(ИсключениеПриОшибке) И Не Принудительно Тогда Возврат ЭтотОбъект КонецЕсли;
|
||||
|
||||
ИмяФайлаТела = Ответ.ПолучитьИмяФайлаТела();
|
||||
|
||||
ИмяФайлаТела = Ответ.ПолучитьИмяФайлаТела();
|
||||
|
||||
Возврат ИмяФайлаТела;
|
||||
|
||||
КонецФункции
|
||||
@@ -1469,33 +1469,33 @@
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьТелоОтветаКакДвоичныеДанные()
|
||||
|
||||
ПотокТела = Ответ.ПолучитьТелоКакПоток();
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокТела);
|
||||
РезультатЧтения = ЧтениеДанных.Прочитать();
|
||||
Данные = РезультатЧтения.ПолучитьДвоичныеДанные();
|
||||
|
||||
ЧтениеДанных.Закрыть();
|
||||
ПотокТела.Закрыть();
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
|
||||
ПотокТела = Ответ.ПолучитьТелоКакПоток();
|
||||
ЧтениеДанных = Новый ЧтениеДанных(ПотокТела);
|
||||
РезультатЧтения = ЧтениеДанных.Прочитать();
|
||||
Данные = РезультатЧтения.ПолучитьДвоичныеДанные();
|
||||
|
||||
ЧтениеДанных.Закрыть();
|
||||
ПотокТела.Закрыть();
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьТелоЗапросаКакДвоичныеДанные()
|
||||
|
||||
Если ЗначениеЗаполнено(ЗапросФайлТела) Тогда
|
||||
Данные = Новый ДвоичныеДанные(ЗапросФайлТела);
|
||||
Иначе
|
||||
Данные = ЗапросТело;
|
||||
КонецЕсли;
|
||||
|
||||
Если Данные = Неопределено Тогда
|
||||
Данные = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
|
||||
Если ЗначениеЗаполнено(ЗапросФайлТела) Тогда
|
||||
Данные = Новый ДвоичныеДанные(ЗапросФайлТела);
|
||||
Иначе
|
||||
Данные = ЗапросТело;
|
||||
КонецЕсли;
|
||||
|
||||
Если Данные = Неопределено Тогда
|
||||
Данные = ПолучитьДвоичныеДанныеИзСтроки("");
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Данные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ОтменитьЗаписьMultipart()
|
||||
|
||||
Reference in New Issue
Block a user