.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。 这里有一篇关于如何做的文章: