C#httpclient减小响应大小

时间:2019-02-21 06:40:10

标签: c# httpclient

所以我目前正在尝试减小请求的大小以最大程度地减少带宽使用量,当找到字符串或达到字节限制大小时是否可以关闭/结束连接?

我已达到带宽限制,因此我想减少传入的响应以最大程度地减少带宽使用量。

例如,如果有可能结束/停止连接

 StringExample123
在响应中找到

,那太好了。

我尝试了诸如

之类的解决方案
            var response = await httpclient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

但是看起来好像它仍然接收整个页面并且一旦接收到头数据就不会终止连接。

我也尝试过使用Range标头,但是似乎它正在接收整个主体内容,因此没有减小响应大小/带宽的使用。

范围示例-

        int size = 1000;
        httpclient.DefaultRequestHeaders.Range = new RangeHeaderValue(0, size);

            var response = await httpclient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

            using (var stream = await response.Content.ReadAsStreamAsync())
            {
                var bytes = new byte[size];
                var bytesread = stream.Read(bytes, 0, bytes.Length);
                stream.Close();
            }

但是如果我随后输出响应内容,则它将包含整个页面。

我的代码的完整概述-

    static async Task<string> Request(string cred)
    {
        string url = "https://www.example.com";
        var parameters = new Dictionary<string, string> { { "search", "Example" } };
        int size = 100;

        var httpClientHandler = new HttpClientHandler
        {
            Proxy = new WebProxy("127.0.0.1:0000", false),
            UseProxy = true
        };

        using(var httpclient = new HttpClient(httpClientHandler))
        {
            httpclient.DefaultRequestHeaders.Range = new RangeHeaderValue(0, size);

            var request = new HttpRequestMessage(HttpMethod.Post, url);
            request.Content = new FormUrlEncodedContent(parameters);

            var response = await httpclient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

            using (var stream = await response.Content.ReadAsStreamAsync())
            {
                var bytes = new byte[size];
                var bytesread = stream.Read(bytes, 0, bytes.Length);
                stream.Close();
            }

            log("logs.txt", response.ToString());

        }

        return null;

    }

我也尝试使用Gzip压缩响应,但是如果使用

AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate

会解压缩服务器端或客户端吗?那么它会通过httpclient完全解压缩并增加我的带宽使用率吗,还是httpclient会收到压缩版本以保持我的带宽使用率低然后在没有带宽使用的情况下将其解压缩到客户端?

对不起,如果我的问题令人困惑,我已经读了太多,并尝试了许多解决方案,令我有些困惑。

0 个答案:

没有答案