diff --git a/src/OneScript.StandardLibrary/Http/HttpConnectionContext.cs b/src/OneScript.StandardLibrary/Http/HttpConnectionContext.cs
index 78472bfbc..553bdfc6a 100644
--- a/src/OneScript.StandardLibrary/Http/HttpConnectionContext.cs
+++ b/src/OneScript.StandardLibrary/Http/HttpConnectionContext.cs
@@ -1,4 +1,4 @@
-/*----------------------------------------------------------
+/*----------------------------------------------------------
This Source Code Form is subject to the terms of the
Mozilla Public License, v.2.0. If a copy of the MPL
was not distributed with this file, You can obtain one
@@ -199,11 +199,23 @@ public HttpResponseContext Head(HttpRequestContext request)
/// Строка. Имя выходного файла
/// HTTPОтвет. Ответ сервера.
[ContextMethod("ВызватьHTTPМетод", "CallHTTPMethod")]
- public HttpResponseContext Patch(string method, HttpRequestContext request, string output = null)
+ public HttpResponseContext CallHTTPMethod(string method, HttpRequestContext request, string output = null)
{
return GetResponse(request, method, output);
}
+ ///
+ /// Вызвать произвольный HTTP-метод с потоком ответа
+ ///
+ /// Строка. Имя метода HTTP
+ /// HTTPЗапрос. Данные и заголовки запроса http
+ /// HTTPОтвет. Ответ сервера.
+ [ContextMethod("ВызватьHTTPМетодПоток", "CallHTTPMethodStream")]
+ public HttpResponseContext CallHTTPMethodStream(string method, HttpRequestContext request)
+ {
+ return GetResponse(request, method, null, true);
+ }
+
private HttpWebRequest CreateRequest(string resource)
{
var uriBuilder = new UriBuilder(_hostUri);
@@ -335,7 +347,7 @@ private static List ParseRange(string rangeHeader)
return range;
}
- private HttpResponseContext GetResponse(HttpRequestContext request, string method, string output = null)
+ private HttpResponseContext GetResponse(HttpRequestContext request, string method, string output = null, bool rawStream = false)
{
var webRequest = CreateRequest(request.ResourceAddress);
webRequest.AllowAutoRedirect = AllowAutoRedirect;
@@ -359,7 +371,7 @@ private HttpResponseContext GetResponse(HttpRequestContext request, string metho
throw;
}
- var responseContext = new HttpResponseContext(response, output);
+ var responseContext = new HttpResponseContext(response, output, rawStream);
return responseContext;
diff --git a/src/OneScript.StandardLibrary/Http/HttpResponseContext.cs b/src/OneScript.StandardLibrary/Http/HttpResponseContext.cs
index 6f4f0fcbb..8e613ed02 100644
--- a/src/OneScript.StandardLibrary/Http/HttpResponseContext.cs
+++ b/src/OneScript.StandardLibrary/Http/HttpResponseContext.cs
@@ -1,4 +1,4 @@
-/*----------------------------------------------------------
+/*----------------------------------------------------------
This Source Code Form is subject to the terms of the
Mozilla Public License, v.2.0. If a copy of the MPL
was not distributed with this file, You can obtain one
@@ -28,18 +28,27 @@ public class HttpResponseContext : AutoContext, IDisposable
// TODO: Нельзя выделить массив размером больше чем 2GB
// поэтому функционал сохранения в файл не должен использовать промежуточный буфер _body
private HttpResponseBody _body;
-
+ private Stream _rawStream;
+
private string _defaultCharset;
private string _filename;
- public HttpResponseContext(HttpWebResponse response)
+ public HttpResponseContext(HttpWebResponse response, string dumpToFile, bool rawStream)
{
- RetrieveResponseData(response, null);
- }
- public HttpResponseContext(HttpWebResponse response, string dumpToFile)
- {
- RetrieveResponseData(response, dumpToFile);
+ if (!rawStream)
+ {
+
+ RetrieveResponseData(response, dumpToFile);
+ }
+ else
+ {
+ StatusCode = (int)response.StatusCode;
+ _defaultCharset = response.CharacterSet;
+
+ ProcessHeaders(response.Headers);
+ _rawStream = response.GetResponseStream();
+ }
}
private void RetrieveResponseData(HttpWebResponse response, string dumpToFile)
@@ -151,6 +160,9 @@ public IValue GetBodyAsBinaryData()
[ContextMethod("ПолучитьТелоКакПоток", "GetBodyAsStream")]
public IValue GetBodyAsStream()
{
+ if(_rawStream != null)
+ return new GenericStream(_rawStream, true);
+
if (_body == null)
return ValueFactory.Create();