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

使用Java JSoup库登录网页时遭遇URL未找到错误:请求的URL /pls/apex/f不存在

解决JSoup登录时"/pls/apex/f未找到"的问题

看起来你在使用JSoup登录Oracle APEX风格的页面时踩了路径的坑,错误提示里的/pls/apex/f明显不是表单实际要提交的目标地址,我帮你分析下问题和解决方案:

首先看你贴的登录页面源码,表单的action是wwv_flow.accept,这是一个相对路径,意味着你不能直接请求/pls/apex/f,而是要把这个相对路径和登录页面的基础URL拼接起来。

核心问题分析

你遇到的404错误,大概率是因为请求的目标URL写错了——这类Oracle APEX的登录表单提交地址,应该是登录页面所在的基础路径加上wwv_flow.accept,而不是你当前请求的/pls/apex/f。

分步解决方案

  1. 确认完整的提交URL
    假设你的登录页面完整URL是https://your-domain.com/pls/apex/login,那么表单提交的目标URL应该是https://your-domain.com/pls/apex/wwv_flow.accept(把登录页的路径最后一部分替换成wwv_flow.accept,或者直接拼接基础路径和action值)。

  2. 正确获取动态参数并提交请求
    APEX的登录表单里有很多动态生成的隐藏参数(比如p_instance、p_page_submission_id),这些参数不能硬编码,必须先请求登录页面拿到最新的值,同时带上会话Cookie,否则登录会失败。

    给你一段可参考的代码:

    import org.jsoup.Connection;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    
    public class ApexLogin {
        public static void main(String[] args) throws Exception {
            // 替换成实际的登录页面URL
            String loginPageUrl = "https://your-domain.com/pls/apex/your-login-page-path";
            // 拼接表单提交的目标URL
            String submitUrl = loginPageUrl.substring(0, loginPageUrl.lastIndexOf("/") + 1) + "wwv_flow.accept";
    
            // 第一步:获取登录页面,拿到Cookie和隐藏参数
            Connection.Response loginFormResponse = Jsoup.connect(loginPageUrl)
                    .method(Connection.Method.GET)
                    .execute();
    
            // 第二步:构造登录请求,带上所有必要参数
            Document loggedInDoc = Jsoup.connect(submitUrl)
                    // 带上登录页面返回的Cookie,维持会话
                    .cookies(loginFormResponse.cookies())
                    // 实际代码建议动态解析页面获取参数,不要硬写死
                    .data("p_flow_id", "153")
                    .data("p_flow_step_id", "101")
                    .data("p_instance", "7648174266222019")
                    .data("p_page_submission_id", "196107580566815")
                    .data("p_request", "")
                    // 替换成实际页面的用户名、密码字段名(需查看输入框的name属性)
                    .data("p_username", "your-actual-username")
                    .data("p_password", "your-actual-password")
                    .method(Connection.Method.POST)
                    .execute()
                    .parse();
    
            // 验证登录是否成功:打印登录后的页面标题
            System.out.println("登录后的页面标题:" + loggedInDoc.title());
        }
    }
    
  3. 关键注意事项

    • 不要硬编码隐藏参数:实际代码里应该用loginFormResponse.parse()来解析登录页面,动态提取p_flow_id、p_instance等参数的值,因为这些值每次会话可能会变化。
    • 确认用户名密码字段名:你贴的源码里没显示登录输入框,需要查看页面里的用户名、密码输入框的name属性,通常是p_username和p_password,但要以实际页面为准。
    • 检查URL拼接是否正确:如果登录页面的路径是https://your-domain.com/pls/apex(没有后缀),那么提交URL就是https://your-domain.com/pls/apex/wwv_flow.accept。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:34:06