.NET的HttpWebResponse解压缩自动GZiped和缩小的响应?

我正在尝试执行一个接受压缩响应的请求

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

我不知道当我添加第二行时,我将不得不手动解压缩。

我find了答案。

您可以将代码更改为:

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

你将有自动解压缩。 不需要改变其余的代码。

对于.NET Core来说,更复杂一些。 GZipStream是需要的,因为AutomaticCompression GZipStream没有属性(写入时)考虑下面的GET示例:

 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}"; } } } 

GZIP和Deflate响应不会自动处理。 看到这篇文章的细节: HttpWebRequest和GZip Http响应

我想你必须自己解压缩stream。 这里有一篇关于如何做的文章:

http://www.west-wind.com/WebLog/posts/102969.aspx