通过WebClient.DownloadData自动解压缩gzip响应

我希望自动解压GZiped响应。 我正在使用下面的代码片段:

mywebclient.Headers[HttpRequestHeader.AcceptEncoding] = "gzip"; mywebclient.Encoding = Encoding.UTF8; try { var resp = mywebclient.DownloadData(someUrl); } 

我已经检查HttpRequestHeader enum ,并没有select通过Headers做到这一点

我怎样才能自动解压缩resp? 或者是否有另一个function,我应该使用,而不是mywebclient.DownloadData

WebClient使用HttpWebRequest封面。 而HttpWebRequest支持gzip / deflate解压。 请参阅HttpWebRequest自动解压缩属性

但是,WebClient类不直接公开此属性。 所以你必须从它派生来设置底层HttpWebRequest的属性。

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

根据您的情况,自己做减压可能会更简单。

 using System.IO.Compression; using System.Net; try { var client = new WebClient(); client.Headers[HttpRequestHeader.AcceptEncoding] = "gzip"; var responseStream = new GZipStream(client.OpenRead(myUrl), CompressionMode.Decompress); var reader = new StreamReader(responseStream); var textResponse = reader.ReadToEnd(); // do stuff } 

为了清晰,我创build了所有的临时variables。 这一切都可以扁平textResponse只有clienttextResponse

或者,如果简单是目标,你甚至可以使用Demis Bellot的ServiceStack.Text来做到这一点:

 using ServiceStack.Text; var resp = "some url".GetJsonFromUrl(); 

(还有其他.Get*FromUrl扩展方法)