我正在尝试使用代码查看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查看该页面的来源。这是怎么回事?
答案 0 :(得分:4)
该URL的响应是gzip压缩,您应该解压缩它或设置空的Accept-Encoding标头,您不需要该用户代理字段。
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);
答案 1 :(得分:0)
我今天遇到了同样的问题。
使用WebClient对象检查URL是否返回了某些内容。
但我的经历却与众不同。我尝试删除Accept-Encoding,基本上使用了@Antonio Bakula在他的回答中给出的代码。但我每次都会遇到相同的错误(InvalidOperationException)
所以这不起作用:
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。