2011-11-23 69 views
0

我目前正在使用Apache HttpClient 4.1.2的項目,它從網站檢索一些數據。Java Apache HttpClient EnityUtils塊

應用程序的功能:進入網頁,然後進入下一個(找到的)頁面,直到到達最後(例如:轉到第1頁 - >找到20個頁面 - >轉到下一個20頁)。問題在於它在檢索一些隨機頁面時停滯不前,並且不會繼續爬網。

下面是一些代碼:

DefaultHttpClient mainHttp; 
HttpPost post; 
HttpResponse response; 
HttpEntity entity; 
String s; 
int curPage = 1; 
int index = 0; 
boolean ok = true; 

... 

while (ok) { 
    response = mainHttp.execute(post); 
    entity = response.getEntity(); 
    if (entity != null) { 
    System.out.println("Enter " + curPage); 
    s = EntityUtils.toString(entity); 
    System.out.println("Exit " + curPage); 
    index = s.indexOf("[" + curPage + "]"); 
    if (index > 0) { 
     parseContent(); 
    } else { 
     ok = false; 
    }     
    } 
} 

在調試窗口時顯示是這樣的:

Enter 1 
Exit 1 
. 
. 
. 
Enter n 

我也使用一個HTTP請求分析器和我看到的頁面stucks上,數據不會完全檢索(它不會到達</html>或頁面末尾)。

在這種情況下,如何跳過或重試下載數據?誰能幫我?

謝謝!

LE:

實際設置爲:

mainHttp.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(1, true)); 
mainHttp.getParams().setParameter("http.connection-manager.timeout", 15000); 
mainHttp.getParams().setParameter("http.socket.timeout", 15000); 
mainHttp.getParams().setParameter("http.connection.timeout", 15000); 

其中15000爲以毫秒爲單位的超時時間。

謝謝你的幫助。

回答

0
DefaultMethodRetryHandler retryhandler = new DefaultMethodRetryHandler(1, true); 
mainHttp.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryhandler); 

來源:http://hc.apache.org/httpclient-3.x/tutorial.html方法恢復

但這只是如果有發生,請檢查您每次提出要求

+0

都能跟得上時間的IOExceptions任何異常。依然沒有。我也有一個暫停,並沒有任何反應。 :( –

+0

但是你真的確定你從服務器得到了每一頁的響應嗎? – 2011-11-23 21:59:10

+0

是的,我100%確定。它下載n-1頁並在第n頁上查找xx%。 –

相關問題