Skip to content
Open
51 changes: 28 additions & 23 deletions src/OneScript.StandardLibrary/Http/HttpConnectionContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ This Source Code Form is subject to the terms of the
using System.Text;
using OneScript.Contexts;
using OneScript.Exceptions;
using OneScript.Execution;
using OneScript.StandardLibrary.Collections;
using OneScript.Types;
using RegExp = System.Text.RegularExpressions;
Expand Down Expand Up @@ -130,9 +131,9 @@ public int Timeout
/// <param name="output">Строка. Имя файла, в который нужно записать ответ. Необязательный параметр.</param>
/// <returns>HTTPОтвет. Ответ сервера.</returns>
[ContextMethod("Получить", "Get")]
public HttpResponseContext Get(HttpRequestContext request, string output = null)
public HttpResponseContext Get(IBslProcess process, HttpRequestContext request, string output = null)
{
return GetResponse(request, "GET", output);
return GetResponse(process, request, "GET", output);
}

/// <summary>
Expand All @@ -141,9 +142,9 @@ public HttpResponseContext Get(HttpRequestContext request, string output = null)
/// <param name="request">HTTPЗапрос. Данные и заголовки запроса http</param>
/// <returns>HTTPОтвет. Ответ сервера.</returns>
[ContextMethod("Записать", "Put")]
public HttpResponseContext Put(HttpRequestContext request)
public HttpResponseContext Put(IBslProcess process, HttpRequestContext request)
{
return GetResponse(request, "PUT");
return GetResponse(process, request, "PUT", null);
}

/// <summary>
Expand All @@ -153,9 +154,9 @@ public HttpResponseContext Put(HttpRequestContext request)
/// <param name="output">Строка. Имя файла, в который нужно записать ответ. Необязательный параметр.</param>
/// <returns>HTTPОтвет. Ответ сервера.</returns>
[ContextMethod("ОтправитьДляОбработки", "Post")]
public HttpResponseContext Post(HttpRequestContext request, string output = null)
public HttpResponseContext Post(IBslProcess process, HttpRequestContext request, string output = null)
{
return GetResponse(request, "POST", output);
return GetResponse(process, request, "POST", output);
}

/// <summary>
Expand All @@ -164,9 +165,9 @@ public HttpResponseContext Post(HttpRequestContext request, string output = null
/// <param name="request">HTTPЗапрос. Данные и заголовки запроса http</param>
/// <returns>HTTPОтвет. Ответ сервера.</returns>
[ContextMethod("Удалить", "Delete")]
public HttpResponseContext Delete(HttpRequestContext request)
public HttpResponseContext Delete(IBslProcess process, HttpRequestContext request)
{
return GetResponse(request, "DELETE");
return GetResponse(process, request, "DELETE");
}

/// <summary>
Expand All @@ -175,9 +176,9 @@ public HttpResponseContext Delete(HttpRequestContext request)
/// <param name="request">HTTPЗапрос. Данные и заголовки запроса http</param>
/// <returns>HTTPОтвет. Ответ сервера.</returns>
[ContextMethod("Изменить", "Patch")]
public HttpResponseContext Patch(HttpRequestContext request)
public HttpResponseContext Patch(IBslProcess process, HttpRequestContext request)
{
return GetResponse(request, "PATCH");
return GetResponse(process, request, "PATCH");
}

/// <summary>
Expand All @@ -186,9 +187,9 @@ public HttpResponseContext Patch(HttpRequestContext request)
/// <param name="request">HTTPЗапрос. Данные и заголовки запроса http</param>
/// <returns>HTTPОтвет. Ответ сервера.</returns>
[ContextMethod("ПолучитьЗаголовки", "Head")]
public HttpResponseContext Head(HttpRequestContext request)
public HttpResponseContext Head(IBslProcess process, HttpRequestContext request)
{
return GetResponse(request, "HEAD");
return GetResponse(process, request, "HEAD");
}

/// <summary>
Expand All @@ -199,9 +200,9 @@ public HttpResponseContext Head(HttpRequestContext request)
/// <param name="output">Строка. Имя выходного файла</param>
/// <returns>HTTPОтвет. Ответ сервера.</returns>
[ContextMethod("ВызватьHTTPМетод", "CallHTTPMethod")]
public HttpResponseContext Patch(string method, HttpRequestContext request, string output = null)
public HttpResponseContext CallHTTPMethod(IBslProcess process, string method, HttpRequestContext request, string output = null)
{
return GetResponse(request, method, output);
return GetResponse(process, request, method, output);
}

private HttpWebRequest CreateRequest(string resource)
Expand Down Expand Up @@ -335,12 +336,12 @@ private static List<Range> ParseRange(string rangeHeader)
return range;
}

private HttpResponseContext GetResponse(HttpRequestContext request, string method, string output = null)
private HttpResponseContext GetResponse(IBslProcess process, HttpRequestContext request, string method, string output = null)
{
var webRequest = CreateRequest(request.ResourceAddress);
webRequest.AllowAutoRedirect = AllowAutoRedirect;
webRequest.Method = method;
SetRequestHeaders(request, webRequest);
SetRequestHeaders(request, webRequest, process);

if (ContentBodyAllowed(method))
SetRequestBody(request, webRequest);
Expand Down Expand Up @@ -385,7 +386,7 @@ private static void SetRequestBody(HttpRequestContext request, HttpWebRequest we
}
}

private static void SetRequestHeaders(HttpRequestContext request, HttpWebRequest webRequest)
private static void SetRequestHeaders(HttpRequestContext request, HttpWebRequest webRequest, IBslProcess process)
{
foreach (var item in request.Headers.Select(x => x.GetRawValue() as KeyAndValueImpl))
{
Expand Down Expand Up @@ -483,15 +484,19 @@ private static void SetRequestHeaders(HttpRequestContext request, HttpWebRequest
default:
webRequest.Headers.Set(key, value);
break;

}
}

// fix #1151
if (webRequest.UserAgent == default)
{
webRequest.UserAgent = $"1Script v${Assembly.GetExecutingAssembly().GetName().Version}";
}
// fix #1151
if (webRequest.UserAgent == default)
{
webRequest.UserAgent = $"1Script v${Assembly.GetExecutingAssembly().GetName().Version}";
}

if (request.AccessToken != null)
{
string token = request.AccessToken.ToString(process);
Copy link
Owner

@EvilBeaver EvilBeaver Aug 19, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Упадет, если null. (везде в методах он необязательный со значением null по умолчанию)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Сделал обязательным process

webRequest.Headers.Set(HttpRequestHeader.Authorization, $"Bearer {token}");
}
}

Expand Down
13 changes: 13 additions & 0 deletions src/OneScript.StandardLibrary/Http/HttpRequestContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ This Source Code Form is subject to the terms of the
using OneScript.Exceptions;
using OneScript.StandardLibrary.Binary;
using OneScript.StandardLibrary.Collections;
using OneScript.StandardLibrary.Security.Tokens;
using OneScript.StandardLibrary.Text;
using ScriptEngine.Machine;
using ScriptEngine.Machine.Contexts;
Expand Down Expand Up @@ -44,6 +45,8 @@ private void SetBody(IHttpRequestBody newBody)

public Stream Body => _body?.GetDataStream();

public AccessTokenContext AccessToken { get; private set; }

/// <summary>
/// Относительный путь к ресурсу на сервере (не включает имя сервера)
/// </summary>
Expand Down Expand Up @@ -115,6 +118,16 @@ public GenericStream GetBodyAsStream()
return new GenericStream(_body.GetDataStream());
}

/// <summary>
/// Добавляет токен доступа к HTTP-запросу. Устанавливает заголовок Authorization.
/// </summary>
/// <param name="accessToken">Токен доступа</param>
[ContextMethod("ДобавитьТокенДоступа", "AddAccessToken")]
public void AddAccessToken(AccessTokenContext accessToken)
{
AccessToken = accessToken;
}

[ScriptConstructor(Name = "Формирование неинициализированного объекта")]
public static HttpRequestContext Constructor()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="ProDotNetZip" Version="1.20.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading