2013-05-25 30 views
0

我們正在學習使用JSOUP和urlconnection,所以我們從我們選擇的網站解析頁面並解析頁面以回答有趣的問題。解析網站時的SocketTimeoutException(HW)

一切正常,然而現在每一個我都得到一個SocketTimeOutException。我認爲這是因爲該網站斷開了我的程序(或者讓我出門,或者節流,或者其他什麼)。

我每次下載新頁面時都會在0-30秒之間實現隨機睡眠。我認爲它有幫助,但它仍然發生。所以現在我試圖捕捉異常並在遞歸嘗試之前再睡15分鐘。

有沒有更好的方法來處理這個問題?這是我得到例外的原因嗎?

此外,它會幫助每隔幾分鐘改變IP(這在Java中是可能的)嗎? 謝謝

+0

看看http:// stackoverflow。com/questions/6571548/i-get-a-sockettimeoutexception-in-jsoup-read-timed-out – 2014-01-15 20:21:49

回答

1

一切運作良好,然而每一個現在,然後我得到一個SocketTimeOutException。我認爲這是因爲該網站斷開了我的程序(或者讓我出門,或者節流,或者其他什麼)。

HTTP中的連接失敗是預計。這是協議的本質。這可能有很多原因(你的newtork不穩定,他們的網絡不穩定,他們的防火牆認爲你在攻擊他們並阻止,你的防火牆認爲你受到攻擊和阻止)。

我已經實現每一個新的頁面下載時間0-30秒之間的隨機睡眠。我認爲它有幫助,但它仍然發生。所以現在我試圖捕捉異常並在遞歸嘗試之前再睡15分鐘。

每當我成功獲得一個頁面或每次出現錯誤然後重試時我都會睡覺。我不會等這麼多,但(十五分鐘?),我會讓它兩分鐘上升1分鐘。

有沒有更好的方法來處理這個問題?這是我得到例外的原因嗎?

如上所述,您會因網絡而導致異常。你無能爲力,這是正常的網絡行爲。

此外,它會幫助每隔幾分鐘改變IP(這在Java中是可能的)嗎?

如果目標網站進行某種日誌記錄並在n請求後阻止IP地址,將有所幫助。不過,您無法通過Java以您想要的方式更改它。 IP地址屬於機器(不是程序),並且大部分時間由其他人分配,而不是您。

您可以通過代理進行HTTP請求,然後他們的IP地址就會到達目標服務器(並且在被禁止時會更改代理),但這會使您的連接更加不穩定,因爲您在「交易」上增加了一層。

+0

非常有幫助,謝謝。你覺得隨機睡眠(30)秒也太多了嗎?我應該做一個隨機的10秒(遞歸)。還有什麼關於VPN,不會「改變」我的IP在網頁的眼睛? –

+0

看,如果你*睡覺*爲了避免被阻止,金額將高度依賴於目標的網站配置。 (如果他們阻止某人每分鐘發出一個以上的請求,那麼當然要在兩次請求之間休息一分鐘)。但是如果你只是因爲「不穩定」而睡着了,那麼10秒就好了。 – acdcjunior

+0

關於VPN,它*可能*改變你的IP(最終,我們不能肯定地說,因爲我們不知道你的網絡是如何配置的),但是你每次使用IP時仍然會有相同的IP請求。如果目標站點根據請求的數量阻止IP,那麼使用VPN沒有任何好處(您會以同樣的方式阻止)。除非......你有很多的VPN並不斷改變它們(就像我在代理結束時所說的那樣)。 – acdcjunior