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

使用Jsoup实现网站简单登录失败,请求技术帮助

解决Jsoup登录后仍返回登录页的问题

你这情况应该是登录请求没被服务器正确认可,明明传了账号密码却还是回到登录页,我帮你梳理几个常见的问题点和解决办法:

1. 先确认登录请求的真实URL

很多网站的登录表单不是直接提交到根域名的,得先访问登录页面,看看表单的action属性值,那才是真正接收登录请求的地址。比如有些网站是/login或者/auth这类路径,直接提交到根域名肯定不行。

示例代码:

// 先获取登录页面,找到登录表单
String baseUrl = "https://moj.tvz.hr";
Document loginPage = Jsoup.connect(baseUrl).get();
Element loginForm = loginPage.select("form").first();
// 提取表单的提交地址
String loginActionUrl = loginForm.attr("action");
// 如果是相对路径,拼接成完整URL
if (!loginActionUrl.startsWith("http")) {
    loginActionUrl = baseUrl + loginActionUrl;
}

2. 提交完整的表单参数(别漏了隐藏字段)

登录表单里除了用户名和密码,往往还有隐藏的输入字段——比如CSRF令牌、会话ID这类,服务器靠这些来验证请求是不是合法的,只传login和passwd肯定过不了验证。

示例代码:

// 收集表单里所有带name属性的输入字段
Map<String, String> formData = new HashMap<>();
for (Element input : loginForm.select("input[name]")) {
    String fieldName = input.attr("name");
    String fieldValue = input.attr("value");
    formData.put(fieldName, fieldValue);
}
// 覆盖成你的用户名和密码
formData.put("login", "gost");
formData.put("passwd", "gost");

3. 统一用HTTPS协议

你代码里第一次请求用的是http://moj.tvz.hr,第二次又换成https,协议不一致可能导致cookie无法正确传递。现在大部分网站都强制HTTPS,建议全程用HTTPS访问。

4. 加上浏览器请求头

有些网站会检查请求的User-Agent,如果识别出是爬虫工具(比如Jsoup默认的UA),可能直接拒绝或者返回登录页。模拟一个真实浏览器的UA就能解决这个问题。

示例代码(加到登录请求里):

Response res = Jsoup.connect(loginActionUrl)
        .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
        .data(formData)
        .method(Method.POST)
        .execute();

完整的修正后代码

把上面的步骤整合起来,试试这段代码:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class TvzLogin {
    public static void main(String[] args) throws IOException {
        String baseUrl = "https://moj.tvz.hr";
        String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36";

        // 1. 获取登录页面,提取表单信息
        Document loginPage = Jsoup.connect(baseUrl)
                .userAgent(userAgent)
                .get();
        Element loginForm = loginPage.select("form").first();
        String loginAction = loginForm.attr("action");
        String loginUrl = loginAction.startsWith("http") ? loginAction : baseUrl + loginAction;

        // 2. 收集所有表单参数
        Map<String, String> formData = new HashMap<>();
        for (Element input : loginForm.select("input[name]")) {
            formData.put(input.attr("name"), input.attr("value"));
        }
        // 设置用户名和密码
        formData.put("login", "gost");
        formData.put("passwd", "gost");

        // 3. 提交登录请求
        Response loginResponse = Jsoup.connect(loginUrl)
                .userAgent(userAgent)
                .data(formData)
                .method(Method.POST)
                .followRedirects(true) // 自动跟随登录后的重定向
                .execute();

        // 4. 访问登录后的页面,验证是否成功
        Document loggedInPage = Jsoup.connect(baseUrl)
                .userAgent(userAgent)
                .cookies(loginResponse.cookies())
                .get();

        System.out.println("登录后页面标题:" + loggedInPage.title());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:37:07