我正在尝试使用以下代码查看 http://simpledesktops.com/browse/desktops/2012/may/17/where-the-wild-things-are/的来源:
String URL = "http://simpledesktops.com/browse/desktops/2012/may/17/where-the-wild-things-are/";
WebClient webClient = new WebClient();
webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");
webClient.Encoding = Encoding.GetEncoding("Windows-1255");
string download = webClient.DownloadString(URL);
webClient.Dispose();
Console.WriteLine(download);
当我运行它时,控制台返回一堆废话,看起来像是解码错误。
我也尝试添加标题无济于事:
webClient.Headers.Add("user-agent", "Mozilla/5.0 (Windows; Windows NT 5.1; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");
webClient.Headers.Add("Accept-Encoding", "gzip,deflate");
其他网站都返回了正确的 html 源代码。我还可以通过Chrome查看页面的源代码。这是怎么回事?
URL的响应是gzip的,您应该解压缩它或设置空的接受编码标头,您不需要该用户代理字段。
String URL = "http://simpledesktops.com/browse/desktops/2012/may/17/where-the-wild-things-are/";
WebClient webClient = new WebClient();
webClient.Headers.Add("Accept-Encoding", "");
string download = webClient.DownloadString(URL);
我今天遇到了同样的事情。
使用 WebClient 对象检查 URL 是否返回某些内容。
但我的经历是不同的。我尝试删除接受编码,基本上使用@Antonio巴库拉在他的答案中给出的代码。但是我每次都收到相同的错误(无效操作异常)
所以这不起作用:
WebClient wc = new WebClient();
wc.Headers.Add("Accept-Encoding", "");
string result = wc.DownloadString(url);
但是添加"任何"文本作为用户代理确实可以解决问题。这工作正常:
WebClient wc = new WebClient();
wc.Headers.Add(HttpRequestHeader.UserAgent, "My User Agent String");
System.IO.Stream stream = wc.OpenRead(url);
您的里程可能会明显不同,也值得注意。我使用的是 ASP.NET 4.0.30319。