2012-10-14 74 views
1

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

我试图下载下面的网页,大部分时间它只是返回一个空白页面,但有时它会工作一次,但后来相同的搜索将无法第二次工作。不知道为什么,我有相同的代码为其他网站工作,并且工作得很好。c#webclient空白页

http://tpb.pirateparty.org.uk/search/test/0/99/0
“测试”是将根据搜索而改变的搜索文本。

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

有人知道我可能会错过的东西吗?

+0

恐怕周杰伦,但好像你的代码在我的机器上工作正常。我跑了太多次了。每次都使用相同的HTML。您可能需要检查Web客户端的TIMEOUT属性。这将有所帮助。它在NS中设置。 – pordi

回答

0

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

因此,使用wireshark或某事来查看当您使用浏览器时发送了哪些标头(您应该查看User-Agent字段),然后使用类似下面的命令设置标头。

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

感谢您的建议,它看起来像你是正确的标题。 –

+0

我发现ppukuid = UPEx9FB6x1mWVkwhAxBMAg ==作为一个cookie。它在每次刷新时都会更改,我可以立即加载搜索结果的第一页,但是当我移动到第2页时,它将返回空白。我猜是因为身份证是错的?有什么办法可以通过这个吗? –

+0

你不能只是复制cookie的东西,我认为这将是最好的跟踪cookie信息和更新你的请求,当你走 – Sheena

2

除了希娜的回答是:另一种可能是你没有正确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(); 
}