我正在尝试执行一个接受压缩响应的请求
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
我想知道当我添加第二行时,是否需要手动处理解压缩。
我正在尝试执行一个接受压缩响应的请求
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
我想知道当我添加第二行时,是否需要手动处理解压缩。
我找到了答案。
你可以将代码更改为:
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
你将会拥有自动解压功能,不需要更改其余代码。
对于.NET Core,情况有些复杂。由于没有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响应
我认为你需要自己解压流。这里有一篇关于如何解压的文章: