连接用户jsoup重定向错误

问题描述 投票:0回答:1

我正在尝试从我的网络服务器上的动态 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());

我将参数与数据放在一起,因此名称是登录名,密码显然是密码,请求是网址重定向。

当我尝试 tjis 代码时,本机会与“访客”Zabbix 用户建立连接。这意味着它无权查看我想要的内容。 jsoup 没有使用我的管理员登录。 当我尝试禁用 Zabbix 来宾用户时,出现错误:

IOException: Too many redirects occurred trying to load URL

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

我确实需要以管理员用户身份进行连接。解决方法是为访客设置管理密码(我尝试过并且有效)。

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

java http-redirect jsoup
1个回答
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,Jsoup 还有一个采用
    parse()
    InputStream
    方法。

© www.soinside.com 2019 - 2024. All rights reserved.