2012-10-14 77 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(); 
}