2015-05-21 63 views
3

我想解析一個網站,但我遇到了Too much redirect異常。 這裏是我的代碼:如何處理與HtmlUnit重複過多

WebClient client = new WebClient(BrowserVersion.FIREFOX_24); 
HtmlPage homePage = null; 
String url = "http://www.freelake.org/pages/Freetown-Lakeville_RSD/Departments/Director_of_Financial_Operatio"; 
try { 
    client.getOptions().setUseInsecureSSL(true); 
    client.setAjaxController(new NicelyResynchronizingAjaxController()); 
    client.getOptions().setThrowExceptionOnFailingStatusCode(false); 
    client.getOptions().setThrowExceptionOnScriptError(false); 
    client.waitForBackgroundJavaScript(30000); 
    client.waitForBackgroundJavaScriptStartingBefore(30000); 
    client.getOptions().setCssEnabled(false); 
    client.getOptions().setJavaScriptEnabled(true); 
    client.getOptions().setRedirectEnabled(true); 
    homePage = client.getPage(url); 
    synchronized (homePage) { 
     homePage.wait(25000); 
    } 
    System.out.println(homePage.asXml()); 
} catch (Exception e) { 
    e.printStackTrace(); 
}   

異常低於

com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: Too much redirect for http://www.freelake.org/resolver/2345183424.20480.0000/route.00/pages/Freetown-Lakeville_RSD/Departments/Director_of_Financial_Operatio 
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1353) 
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1371) 

一提的是有沒有辦法來解決這個問題?

回答

5

這是因爲緩存的HtmlUnit的反應,並有重定向然後另一頁返回回來。

我用下面的測試,它的工作原理:

client.getCache().setMaxSize(0); 
+0

謝謝艾哈邁德它工作:) –

+0

偉大的,然後請接受答案 –

0

http://www.freelake.org/pages/Freetown-Lakeville_RSD/Departments/Director_of_Financial_Operatio頁面發送2個重定向:

  1. http://www.freelake.org/GroupHome.page,然後
  2. http://www.freelake.org/pages/Freetown-Lakeville_RSD/Departments/Director_of_Financial_Operatio

使用第二個URL,它應該工作。或者尋找一種方法告訴圖書館允許一定數量的重定向; 2在這種情況下。

編輯:這可能有幫助。不要使用這個庫自己:

client.getOptions().setRedirectEnabled(true); 
+0

感謝您的答覆。是的,我已經使用第二個網址,我已啓用重定向,但我仍然得到同樣的例外 –

1

我面臨同樣的問題,但我通過硒這樣做。在Selenium中,您無法直接訪問WebClient,因爲它是protected

我工作圍繞它像這樣:

WebDriver driver = new HtmlUnitDriver(true) { 
    { 
     this.getWebClient().getCache().setMaxSize(0); 
    } 
};