1
0
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:
Vitaly the Alpaca (bot)
2025-04-22 21:18:27 +03:00
parent 2c7ae2aec5
commit ddf681a8f3
87 changed files with 8212 additions and 7730 deletions
+6 -2
View File
@@ -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
+5 -1
View File
@@ -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
View File
@@ -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_УстановкаТела"'
}
}
+3
View File
@@ -0,0 +1,3 @@
{
"URL": "https://httpbin.org"
}
+4
View File
@@ -0,0 +1,4 @@
{
"URL": "https://httpbin.org",
"Image": "https://api.athenaeum.digital/test_data/picture.jpg"
}
+3
View File
@@ -0,0 +1,3 @@
{
"URL": "https://httpbin.org"
}
+3
View File
@@ -0,0 +1,3 @@
{
"URL": "https://httpbin.org"
}
+13
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -1,6 +1,6 @@
Token = "6129457865:AAFyzNYOAFbu...";
Chat = "-1001971186208";
Topic = "9201";
Topic = "9245";
Result = OPI_Telegram.ClearThreadPinnedMessagesList(Token, Chat);
+1 -1
View File
@@ -1,6 +1,6 @@
Token = "6129457865:AAFyzNYOAFbu...";
Chat = "-1001971186208";
Topic = "9201";
Topic = "9245";
Result = OPI_Telegram.CloseForumThread(Token, Chat); // Closes main topic
+1 -1
View File
@@ -1,5 +1,5 @@
Token = "6129457865:AAFyzNYOAFbu...";
Chat = "-1001971186208";
Topic = "9201";
Topic = "9245";
Result = OPI_Telegram.DeleteForumTopic(Token, Chat, Topic);
+1 -1
View File
@@ -1,5 +1,5 @@
Token = "6129457865:AAFyzNYOAFbu...";
ChatID = "@testsichee";
MessageID = "16274";
MessageID = "16369";
Result = OPI_Telegram.DeleteMessage(Token, ChatID, MessageID);
+1 -1
View File
@@ -1,4 +1,4 @@
FileID = "CQACAgIAAx0EcNsaZQACP5toAUu6TTtYbpD7en8NHfKBNYgZlQACGHoAArgXCUjlwAABQfx983M2BA";
FileID = "CQACAgIAAx0EcNsaZQACP_poB9W0eWgicwaPb5m_YiqoSjUK9wACwG0AAvP4OUj5TydMOKyB8DYE";
Token = "6129457865:AAFyzNYOAFbu...";
Result = OPI_Telegram.DownloadFile(Token, FileID);
+1 -1
View File
@@ -1,6 +1,6 @@
Token = "6129457865:AAFyzNYOAFbu...";
Chat = "-1001971186208";
Topic = "9201";
Topic = "9245";
NewName = "NewTestTitle";
NewIcon = "5310132165583840589";
+1 -1
View File
@@ -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
View File
@@ -1,6 +1,6 @@
Token = "6129457865:AAFyzNYOAFbu...";
Chat = "-1001971186208";
Topic = "9201";
Topic = "9245";
Result = OPI_Telegram.OpenForumThread(Token, Chat); // Opens main topic
+1 -1
View File
@@ -1,5 +1,5 @@
Token = "6129457865:AAFyzNYOAFbu...";
ChannelID = "@testsichee";
MessageID = "16274";
MessageID = "16369";
Result = OPI_Telegram.PinMessage(Token, ChannelID, MessageID);
+1 -1
View File
@@ -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
View File
@@ -1,6 +1,6 @@
Token = "6129457865:AAFyzNYOAFbu...";
ChatID = "461699897";
MessageID = "13075";
MessageID = "13139";
ButtonArray = New Array;
ButtonArray.Add("New button 3");
+1 -1
View File
@@ -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
View File
@@ -1,5 +1,5 @@
Token = "6129457865:AAFyzNYOAFbu...";
ChannelID = "@testsichee";
MessageID = "16274";
MessageID = "16369";
Result = OPI_Telegram.UnpinMessage(Token, ChannelID, MessageID);
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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");
+1 -1
View File
@@ -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";
@@ -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"
}
@@ -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,5 +1,5 @@
Токен = "6129457865:AAFyzNYOAFbu...";
IDКанала = "@testsichee";
IDСообщения = "16274";
IDСообщения = "16369";
Результат = OPI_Telegram.ЗакрепитьСообщение(Токен, IDКанала, IDСообщения);
@@ -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,6 +1,6 @@
Токен = "6129457865:AAFyzNYOAFbu...";
IDЧата = "461699897";
IDСообщения = "13078";
IDСообщения = "13142";
Описание = "Новое описание картинки";
Результат = OPI_Telegram.ЗаменитьОписаниеСообщения(Токен, IDЧата, IDСообщения, Описание);
@@ -1,6 +1,6 @@
Токен = "6129457865:AAFyzNYOAFbu...";
IDЧата = "@testsichee";
IDСообщения = "16274";
IDСообщения = "16369";
Текст = "Новый текст сообщения";
Результат = OPI_Telegram.ЗаменитьТекстСообщения(Токен, IDЧата, IDСообщения, Текст);
@@ -1,6 +1,6 @@
Токен = "6129457865:AAFyzNYOAFbu...";
Чат = "-1001971186208";
Тема = "9201";
Тема = "9245";
НовоеИмя = "Новый тестовый заголовок";
НовяИконка = "5310132165583840589";
@@ -1,5 +1,5 @@
Токен = "6129457865:AAFyzNYOAFbu...";
IDКанала = "@testsichee";
IDСообщения = "16274";
IDСообщения = "16369";
Результат = OPI_Telegram.ОткрепитьСообщение(Токен, IDКанала, IDСообщения);
@@ -1,6 +1,6 @@
Токен = "6129457865:AAFyzNYOAFbu...";
Чат = "-1001971186208";
Тема = "9201";
Тема = "9245";
Результат = OPI_Telegram.ОткрытьТемуФорума(Токен, Чат); // Открывает главную тему
@@ -1,6 +1,6 @@
Токен = "6129457865:AAFyzNYOAFbu...";
Чат = "-1001971186208";
Тема = "9201";
Тема = "9245";
Результат = OPI_Telegram.ОчиститьСписокЗакрепленныхСообщенийТемы(Токен, Чат);
@@ -1,6 +1,6 @@
Токен = "6129457865:AAFyzNYOAFbu...";
IDЧата = "461699897";
IDКанала = "@testsichee";
IDСообщения = "16274";
IDСообщения = "16369";
Результат = OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата);
+1 -1
View File
@@ -1,4 +1,4 @@
IDФайла = "CQACAgIAAx0EcNsaZQACP5toAUu6TTtYbpD7en8NHfKBNYgZlQACGHoAArgXCUjlwAABQfx983M2BA";
IDФайла = "CQACAgIAAx0EcNsaZQACP_poB9W0eWgicwaPb5m_YiqoSjUK9wACwG0AAvP4OUj5TydMOKyB8DYE";
Токен = "6129457865:AAFyzNYOAFbu...";
Результат = OPI_Telegram.СкачатьФайл(Токен, IDФайла);
@@ -1,5 +1,5 @@
Токен = "6129457865:AAFyzNYOAFbu...";
IDЧата = "@testsichee";
IDСообщения = "16274";
IDСообщения = "16369";
Результат = OPI_Telegram.УдалитьСообщение(Токен, IDЧата, IDСообщения);
@@ -1,5 +1,5 @@
Токен = "6129457865:AAFyzNYOAFbu...";
Чат = "-1001971186208";
Тема = "9201";
Тема = "9245";
Результат = OPI_Telegram.УдалитьТемуФорума(Токен, Чат, Тема);
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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");
+1 -1
View File
@@ -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Сообщения, Текст);
@@ -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.ОткрытьТемуФорума(Токен, Чат); // Открывает главную тему
+7159 -7159
View File
File diff suppressed because it is too large Load Diff
+146 -1
View File
@@ -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&param2=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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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&param2=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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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&param2=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&param2=John%20Doe&param3=value%26another&param4=%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0&param5=%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&param1=search%3Ftext&param2=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&param2=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&param2=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&param2=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&param2=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&param2=value%20two&param3=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"]).Равно(Размер);
КонецПроцедуры
#КонецОбласти
@@ -2463,9 +2463,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции
@@ -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()
@@ -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
View File
@@ -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&param2=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&param2=John%20Doe&param3=value%26another&param4=%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0&param5=%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&param1=search%3Ftext&param2=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&param2=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&param2=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&param2=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&param2=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&param2=value%20two&param3=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,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()