连接用户jsoup重定向错误

时间:2012-02-12 22:05:04

标签: java redirect connect jsoup

我正在尝试从我的网络服务器上的动态php页面获取一个html表。 Web服务器是Zabbix前端。

以下是我的示例代码:

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用数据,所以name是登录名,密码显然是密码,而request是url重定向。

当我尝试使用tjis代码时,本地连接是“客户”Zabbix用户。这意味着哪些人无权查看我想要的内容。 jsoup没有使用我的管理员登录。 当我尝试禁用访客用户是Zabbix时,我有一个错误:

IOException: Too many redirects occurred trying to load URL

我认为jsoup在重定向后正在发布帖子。但重定向是在我的index.php中进行的,所以......

我真的需要以Admin用户身份进行连接。一个workarround将设置管理密码给客人(我试过,它的工作原理)。

感谢您的帮助, 问候。 奥利弗。

1 个答案:

答案 0 :(得分:0)

登录用户通常存储在会话中。会话通常由cookie维护。但是,Jsoup不会在后续/重定向请求中保留cookie。事实上,Jsoup根本不会自动维护cookie。基本上,您在重定向的页面中不再登录。在设计糟糕的网站中,假设cookie不可用,这可能确实会导致无限重定向循环。

你基本上有两个选择:

  1. 重写您的Jsoup代码,以便您手动维护Cookie。您可以通过Response#cookies()获取回复Cookie。您可以通过Request#cookie()在后续请求中设置Cookie。

  2. 使用真正的HTTP客户端而不是Jsoup来维护cookie。大多数HTTP客户端,甚至是内置的Java SE URLConnection,都允许您在后续HTTP请求中透明地维护cookie,而无需手动收集和设置cookie。最后,您将HTTP客户端的响应作为InputStream并将其提供给Jsoup,后者还使用parse()方法获取InputStream