c#网络客户端空白页

c#网络客户端空白页,c#,download,web-scraping,webclient,C#,Download,Web Scraping,Webclient,我有下面的代码,我有一些奇怪的行为。我正在尝试下载下面的网页,大多数时候它只返回一个空白页面,但有时它会工作一次,但第二次相同的搜索将无法工作。我不太清楚为什么,我有同样的代码在其他网站上运行,它运行得很好 “测试”是搜索文本,它将根据搜索的不同而变化 private static string DownloadHtml() { var client = new WebClient(); var data = client.OpenRead("http://tpb.pirate

我有下面的代码,我有一些奇怪的行为。

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


“测试”是搜索文本,它将根据搜索的不同而变化

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;
}

有人知道我可能遗漏了什么吗?

这可能是因为你对网站的请求是“我是一个脚本”,而不是“我是一个浏览器背后的人”。如果在浏览器中反复搜索效果良好,那么解决方案就是在请求中设置标题

因此,使用wireshark或其他工具查看在使用浏览器时发送的标题(您应该查看用户代理字段),然后使用如下命令设置标题

myWebClient.Headers.Add("some_header_name","the_value");

除了Sheena的回答之外:另一种可能是您没有正确地
处理
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();
}

很抱歉,杰,但你的代码似乎在我的机器上运行得很好。我已经跑了太多次了。每次都是相同的HTML。您可能需要检查webclient的TIMEOUT属性。那会有帮助的。它是在NS中设置的。感谢您的建议,看起来您的标题是正确的。我发现ppukuid=UPEx9FB6x1mWVkwhAxBMAg==是一个cookie。它在每次刷新时都会发生变化,我现在可以获得要加载的第一页搜索结果,尽管当我移动到第2页时返回空白。我猜是因为身份证错了?有什么方法可以通过这个测试吗?你不能只是复制cookie信息,我认为最好是跟踪cookie信息,并在你的请求中进行更新