C # httpclient уменьшает размер ответа - PullRequest
0 голосов
/ 21 февраля 2019

Итак, в настоящее время я пытаюсь уменьшить размер запроса, чтобы минимизировать использование полосы пропускания, возможно ли закрыть / завершить соединение, когда найдена строка или достигнут размер ограничения в байтах?

IЯ нахожусь на пределе пропускной способности, поэтому я хочу уменьшить входящий ответ, чтобы минимизировать использование моей пропускной способности.

Так что, если было возможно разорвать / остановить соединение, например,

 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 просто получит сжатую версию, сохраняющую низкое использование моей полосы пропускания, а затем разархивирует ее на стороне клиента, без использования полосы пропускания?

Извините, если мойвопрос сбивает с толку, я только что прочитал так много и попробовал так много решений, что я немного озадачен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...