2012-02-12 79 views
0

我試圖從我的web服務器上的動態php頁面獲取html表格。 Web服務器是一個Zabbix前端。連接用戶jsoup重定向錯誤

這裏是我的示例代碼:

doc = Jsoup.connect("http://192.168.209.178/zabbix/index.php").data("name", "Admin", "password", "password", "enter", "Enter", "request", "/zabbix/events.php").userAgent("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11").followRedirects(true).post(); 

System.out.println(doc.title()); 
System.out.println(doc.toString()); 

我把我的PARAMS數據,因此名稱是登錄名,密碼顯然是密碼,並且請求是一個URL重定向。

當我嘗試使用tjis代碼時,本地連接會成爲whis「guest」Zabbix用戶。這意味着沒有權利查看我想要的內容。 jsoup沒有使用我的管理員登錄。 當我嘗試禁用來賓用戶的zabbix,我有一個錯誤:

IOException: Too many redirects occurred trying to load URL 

我覺得jsoup正在重定向後的職位。但重定向是在我的index.php,所以...

我真的需要連接作爲管理員用戶。一個workarround將設置管理員密碼給客人(我試了一下,它的工作原理)。

感謝您的幫助, 關心。 Olivier。

回答

0

登錄的用戶通常存儲在會話中。會話通常由Cookie維護。然而,Jsoup不會在隨後的/重定向的請求中保留cookie。事實上,Jsoup根本不會自動維護cookie。基本上,您在重定向頁面中不再登錄。在設計不佳的網站中,假設Cookie不可分割,這可能確實會導致無限重定向循環。

你已經基本上2種選擇:

  1. 重寫你的Jsoup代碼,以便您手動維護的cookie。您可以通過Response#cookies()獲得響應Cookie。您可以通過Request#cookie()在後續請求中設置Cookie。

  2. 使用真正的HTTP客戶端而不是Jsoup來維護cookie。大多數HTTP客戶端(即使是Java SE內置URLConnection)都允許您在後續HTTP請求中透明地維護cookie,而不必手動收集和設置cookie。最後,您將HTTP客戶端的響應作爲InputStream並將其提供給Jsoup,該方法也採用InputStreamparse()方法。

+0

好的,謝謝,我會盡力的。 – user1205713 2012-02-13 07:26:00

+0

好吧,我用HttpClient而不是URLConnection。 – user1205713 2012-02-13 21:11:55

+0

嗨,對不起,但我面對使用VB .Net的同樣的問題。你能否給我一個示例代碼.Net – user1205713 2012-02-21 21:01:04