HttpWebResponse内容编码:标识

本文关键字:标识 编码 HttpWebResponse | 更新日期: 2023-09-27 18:25:22

我使用HttpWebRequest发送和接收web请求。

在一个响应之后,它通常是gzip的内容编码。一些计算机将接收deflate编码。其他一些计算机将接收标识编码。

我已将其设置为读取gzipdeflate编码,但不确定如何读取标识的编码。

string ReturnString = "";
HttpWebRequest HttpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
HttpWebRequest.ProtocolVersion = Version.Parse("1.1");
WebHeaderCollection WebHeaderCollection = HttpWebRequest.Headers;
HttpWebRequest.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
WebHeaderCollection.Add("Accept-Language: en-us");
WebHeaderCollection.Add("Accept-Encoding: gzip, deflate");
HttpWebRequest.KeepAlive = true;
HttpWebResponse HttpWebResponse = (HttpWebResponse)HttpWebRequest.GetResponse();
using (var mem = HttpWebResponse.GetResponseStream())
{
    if (HttpWebResponse.ContentEncoding.ToLower().Contains("gzip"))
    {
        using (var gzip = new GZipStream(mem, CompressionMode.Decompress))
        {
            using (var reader = new StreamReader(gzip))
            {
                ReturnString = reader.ReadToEnd();
            }
        }
    }
    else if (HttpWebResponse.ContentEncoding.ToLower().Contains("deflate"))
    {
        using (var gzip = new DeflateStream(mem, CompressionMode.Decompress))
        {
            using (var reader = new StreamReader(gzip))
            {
                ReturnString = reader.ReadToEnd();
            }
        }
    }
}
WebHeaderCollection ResponseHeaders = HttpWebResponse.Headers;
HttpWebResponse.Close();

编辑:另一台电脑收到了"传输编码:分块",没有内容编码,如果我读对了,它应该取代内容编码。http://en.wikipedia.org/wiki/Chunked_transfer_encoding.

没有办法捕捉任何类型的编码吗?

HttpWebResponse内容编码:标识

RFC:

身份

默认(身份)编码使用无转换不管怎样此内容编码仅用于Accept-编码标头,不应在内容编码中使用头球

至于你的编辑:你不应该关心被分块的响应:使用string resp = new StreamReader(response.GetResponseStream()).ReadToEnd()应该会给你所有的响应数据。