C#没有得到HttpWebResponse的正确回复。编码?

时间:2010-11-20 15:14:33

标签: c# encoding httpwebrequest

我正在尝试使用以下代码获取一些网页:

    public static string FetchPage(string url)
    {

         HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

        req.Method = "GET";

        req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; sv-SE; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 (.NET CLR 3.5.30729";
        req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        req.Headers.Add("Accept-Language", "sv-se,sv;q=0.8,en-us;q=0.5,en;q=0.3");
        req.Headers.Add("Accept-Encoding", "gzip,deflate");
        req.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        req.Headers.Add("Keep-Alive", "115");
        req.Headers.Add("Cache-Control: max-age=0");
        req.AllowAutoRedirect = true;

        req.IfModifiedSince = DateTime.Now;

        using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
        {
           using (Stream resStream = resp.GetResponseStream())
           {
              StreamReader reader = new StreamReader(resStream);
              return reader.ReadToEnd();
            }
        }
    }

有些网页可以使用(W3C,example.com),而我尝过的大多数网页都没有(BBC.co.uk,CNN.com等)。 Wireshark表明我得到了适当的回应。

我已经尝试将阅读器的编码设置为响应的预期编码(CNN - utf8)以及每种可能的组合,但我没有运气。

我错过了什么?

我的回复的第一个字节总是“1f ef bf bd”如果你能够根据它说出一些东西。

2 个答案:

答案 0 :(得分:1)

我怀疑最可能的解释是您正在获取压缩数据而不是解压缩数据。尝试使用流过滤器来放气/解压缩它。有关详细信息,请参阅Rick Strahl的blog article

答案 1 :(得分:1)

在省略“Accept-Encoding”标题时,加载http://bbc.co.uk对我有用:

req.Headers.Add("Accept-Encoding", "gzip,deflate");