我试图做一个接受压缩的响应的请求

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核心东西是涉及多一点。需要一种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响应

我认为你必须给自己解压流。下面是关于如何做到这一点的文章:

  

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top