1

我有以下代码,我得到了一些奇怪的行为。

我正在尝试下载以下网页,大多数情况下它只是返回一个空白页面,但有时它会工作一次,但相同的搜索第二次将无法工作。不太清楚为什么,我有相同的代码在其他网站上工作,而且工作得很好。

http://tpb.pirateparty.org.uk/search/test/0/99/0
'test' 是搜索文本,会根据搜索而改变。

private static string DownloadHtml()
{
    var client = new WebClient();
    var data = client.OpenRead("http://tpb.pirateparty.org.uk/search/test/0/99/0");
    var reader = new StreamReader(data);
    var html = reader.ReadToEnd();
    data.Close();
    reader.Close();
    return html;
}

有谁知道我可能会丢失的东西?

4

2 回答 2

2

除了Sheena的回答:另一种可能是你没有正确Dispose的Http连接。

你可以简单地做:

return new WebClient().DownloadString(
    "http://tpb.pirateparty.org.uk/search/test/0/99/0");

它会处理所有这些细节,或者如果您更喜欢访问底层流,请执行以下操作:

var client = new WebClient();

using (var data = client.OpenRead(
    "http://tpb.pirateparty.org.uk/search/test/0/99/0"))
{
    var reader = new StreamReader(data);
    return reader.ReadToEnd();
}
于 2012-10-14T11:59:05.760 回答
0

这可能与您对网站的请求说“我是脚本”而不是“我是浏览器背后的人”这一事实有关。如果在您的浏览器中反复进行搜索工作正常,那么解决方案就是在您的请求中设置标题。

因此,使用wireshark 或其他工具查看使用浏览器时发送了哪些标头(您应该查看User-Agent 字段),然后只需使用如下命令来设置标头。

myWebClient.Headers.Add("some_header_name","the_value");
于 2012-10-14T11:53:40.000 回答