繁体   English   中英

.NET 的 HttpWebResponse 是否会自动解压缩 GZiped 和 Deflated 响应?

[英]Does .NET's HttpWebResponse uncompress automatically GZiped and Deflated responses?

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

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;

而且你会自动解压。 无需更改代码的 rest。

对于 .NET 核心,事情要多一些。 需要GZipStream ,因为AutomaticCompression没有属性(截至撰写时)考虑以下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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM