2012-02-12 55 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