2010-12-31 5 views
37

Есть ли быстрый способ распаковать gzip-ответ, загруженный с помощью метода WebClient.DownloadString()? Есть ли у вас какие-либо предложения о том, как обрабатывать ответы gzip с помощью WebClient?Uncompressing gzip response от WebClient

ответ

72

Самый простой способ сделать это - использовать встроенный в automatic decompression класс HttpWebRequest.

var request = (HttpWebRequest)HttpWebRequest.Create("http://stackoverflow.com"); 
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

Чтобы сделать это с WebClient вы должны сделать свой собственный класс, производный от WebClient и переопределить метод GetWebRequest().

public class GZipWebClient : WebClient 
{ 
    protected override WebRequest GetWebRequest(Uri address) 
    { 
     HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address); 
     request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
     return request; 
    } 
} 

Также см эту тему: SO Does .NET's HttpWebResponse uncompress automatically GZiped and Deflated responses?

+1

является не нужно указать acceptencoding заголовок для производного класса WebClient? – user3791372

Смежные вопросы