You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jsoup抓取含JSESSIONID的JSP页面登录失败求助

解决Jsoup无法登录目标网站的问题

核心问题分析

你的代码存在几个关键疏漏:直接POST到登录页URL而非表单真实提交地址、未提交登录表单的隐藏字段(如CSRF令牌或会话参数)、请求头不完整,这些都会导致服务器拒绝登录请求。

分步解决方案

  • 获取表单真实提交地址:登录页的表单通常不会把数据POST到当前页面,需要先解析页面中的<form>标签提取action属性的真实地址。
  • 提交所有表单字段:登录表单包含隐藏参数(如会话标识),必须和用户名密码一起提交,否则服务器会判定请求非法。
  • 完善请求头:添加Referer、Content-Type等必要请求头,模拟真实浏览器行为。
  • 保留完整Cookie上下文:确保登录请求返回的所有Cookie都被用于后续页面访问。

修改后的完整代码

public static void main(String[] args) throws Exception {
    String loginFormUrl = "https://planif.esiee.fr/jsp/standard/index.jsp";
    String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36";

    try {
        // 1. 获取登录页,提取初始Cookie和表单结构
        Connection.Response loginForm = Jsoup.connect(loginFormUrl)
                .method(Connection.Method.GET)
                .userAgent(userAgent)
                .execute();
        Map<String, String> initialCookies = loginForm.cookies();
        Document loginDoc = loginForm.parse();

        // 2. 定位登录表单,提取真实提交地址
        Element loginFormElement = loginDoc.selectFirst("form");
        if (loginFormElement == null) {
            System.err.println("页面未找到登录表单");
            return;
        }
        String loginActionUrl = loginFormElement.attr("action");
        // 拼接相对路径为绝对URL
        if (!loginActionUrl.startsWith("http")) {
            loginActionUrl = "https://planif.esiee.fr" + loginActionUrl;
        }

        // 3. 收集所有表单字段(含隐藏字段)
        Map<String, String> formData = new HashMap<>();
        loginDoc.select("input").forEach(input -> {
            String name = input.attr("name");
            String value = input.attr("value");
            if (!name.isEmpty()) {
                formData.put(name, value);
            }
        });
        // 覆盖用户名和密码
        formData.put("login", "lecteur1");
        formData.put("password", "");

        // 4. 提交登录请求
        Connection.Response loginResponse = Jsoup.connect(loginActionUrl)
                .cookies(initialCookies)
                .data(formData)
                .userAgent(userAgent)
                .header("Referer", loginFormUrl)
                .header("Content-Type", "application/x-www-form-urlencoded")
                .followRedirects(true)
                .method(Connection.Method.POST)
                .execute();

        System.out.println("登录响应状态码: " + loginResponse.statusCode());
        System.out.println("登录响应内容预览: " + loginResponse.parse().text().substring(0, 500));

        // 5. 访问登录后的目标页面
        Document projectsPage = Jsoup.connect("https://planif.esiee.fr/jsp/standard/projects.jsp")
                .cookies(loginResponse.cookies())
                .userAgent(userAgent)
                .header("Referer", loginActionUrl)
                .get();

        System.out.println("目标页面标题: " + projectsPage.title());
        System.out.println("目标页面内容预览: " + projectsPage.text().substring(0, 1000));

    } catch (IOException e) {
        e.printStackTrace();
    }
}

调试建议

如果仍未成功,添加以下代码打印请求细节,排查具体问题:

// 打印登录请求的所有参数
System.out.println("提交的表单参数: " + formData);
// 打印登录响应的所有Cookie
System.out.println("登录后Cookie: " + loginResponse.cookies());

内容的提问来源于stack exchange,提问作者PatriotLegends

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:20:40