我正在尝试使用以下代码获取一些网页:
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/