C# 未从 HttpWebResponse 获得正确的响应。编码?

标签 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”。

最佳答案

我怀疑最可能的解释是您获取的是压缩数据而不是解压数据。尝试使用流过滤器来缩小/解压缩它。参见 Rick Strahl 的 blog article了解更多信息。

关于C# 未从 HttpWebResponse 获得正确的响应。编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4233399/

相关文章:

silverlight - WP7 上的 POST 请求

.net - 如何防止 HttpWebRequest 的数据包碎片

c# - 在 C# 中执行 Powershell Cmdlet 代码

c# - 如何在 Entity Framework 4 中处理 ObjectResult

C# - 在任务栏上鼠标悬停时,会生成预览。我怎样才能通过 C# 编码实现这个

c# - 使用 Entity Framework 跨层进行域模型设计

python - 编码斯洛伐克语字母,如 : á š Č é

ruby - 为什么 ruby​​ StringIO 不提供不同的编码

mysql - Ruby 1.9、MySQL 字符编码问题

http - "Split"一个请求到多个服务器