4

我正在尝试使用以下代码查看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 查看页面的源代码。这里发生了什么?

4

2 回答 2

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);
于 2012-05-28T01:54:36.407 回答
1

我今天也遇到了同样的事情。

使用 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。

于 2013-11-11T13:32:01.530 回答