Распаковывает ли .NET HttpWebResponse автоматически GZiped и Deflated ответы? - PullRequest
47 голосов
/ 24 марта 2009

Я пытаюсь сделать запрос, который принимает сжатый ответ

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

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

Ответы [ 4 ]

109 голосов
/ 24 марта 2009

Я нашел ответ.

Вы можете изменить код на:

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

И у вас будет автоматическая декомпрессия. Не нужно менять остальную часть кода.

3 голосов
/ 13 июня 2017

Для .NET Core все немного сложнее. GZipStream необходим, так как для AutomaticCompression нет свойства (на момент написания)

var req = WebRequest.CreateHttp(uri);

/*
 * Headers
 */
req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";

/*
 * Execute
 */
try
{
    using (var resp = await req.GetResponseAsync())
    {
        using (var str = resp.GetResponseStream())
        using (var gsr = new GZipStream(str, CompressionMode.Decompress))
        using (var sr = new StreamReader(gsr))

        {
            string s = await sr.ReadToEndAsync();  
        }
    }
}
catch (WebException ex)
{
    using (HttpWebResponse response = (HttpWebResponse)ex.Response)
    {
        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            string respStr = sr.ReadToEnd();
            int statusCode = (int)response.StatusCode;

            string errorMsh = $"Request ({url}) failed ({statusCode}) on, with error: {respStr}";
        }
    }
}
0 голосов
/ 24 марта 2009

GZIP и Deflate ответы не обрабатываются автоматически. Подробности см. В этой статье: HttpWebRequest и GZip Http Responses

0 голосов
/ 24 марта 2009

Я думаю, вы должны распаковать поток самостоятельно. Вот статья о том, как это сделать:

http://www.west -wind.com / WebLog / сообщений / 102969.aspx

...