2010-12-31 6 views
37

Gibt es eine schnelle Möglichkeit, die mit der WebClient.DownloadString() - Methode heruntergeladene gzip-Antwort zu dekomprimieren? Haben Sie Vorschläge zur Handhabung von gzip Antworten mit dem WebClient?Dekomprimieren der Gzip-Antwort vom WebClient

Antwort

72

Der einfachste Weg, dies zu tun, ist die eingebaute automatic decompression mit der HttpWebRequest Klasse.

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

Um dies zu tun, mit einem WebClient haben Sie Ihre eigene Klasse von WebClient abgeleitet zu machen und die GetWebRequest() Methode außer Kraft setzen.

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

Siehe auch diesen SO thread: Does .NET's HttpWebResponse uncompress automatically GZiped and Deflated responses?

+1

ist es nicht notwendig, den acceptencoding Header für die abgeleitete WebClient-Klasse angeben? – user3791372