C#WebClient DownloadString返回乱码

时间:2012-05-28 01:23:50

标签: c# webclient downloadstring

我正在尝试使用代码查看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查看该页面的来源。这是怎么回事?

2 个答案:

答案 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。