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