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

Jsoup登录Cookie仅主页生效,子页面无法保持登录状态求助

问题:Jsoup登录后携带Cookie访问子页面无法维持登录状态

问题描述

登录成功后可正常获取有效Cookie,但携带这些Cookie访问网站子页面(如https://www.valueresearchonline.com/funds/26123/motilal-oswal-flexi-cap-fund-regular-plan/#fund-portfolio)时,无法维持登录状态,无法查看仅登录可见的“Top Holdings”板块。


有效步骤:获取Cookie

Java登录代码

Connection.Response login2 = Jsoup.connect("https://www.valueresearchonline.com/login/?")
            .timeout(15000)
            .userAgent("Mozilla")
            .data("username", "valid_email")
            .data("password", "valid_password")
            .method(Connection.Method.POST)
            .execute();

System.out.println(login2.statusCode());
System.out.println(login2.cookies());
doc = login2.parse();

System.out.println(doc.body().text().indexOf("My Favourite Stories"));
System.out.println(doc.body().text().indexOf("Logout"));

String sessionId2 = login2.cookie("PHPSESSID");

Chrome抓包的登录请求

curl 'https://www.valueresearchonline.com/login/?' \
            -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
            -H 'Accept-Language: en' \
            -H 'Cache-Control: max-age=0' \
            -H 'Connection: keep-alive' \
            -H 'Cookie: PHPSESSID=pklb54pa5chma4hi69bgfu7vcc; currency=INR; magnitude=LC; ad=53c5b4ffbcbd345c755abe149e639d10aa8fdb70; ad=53c5b4ffbcbd345c755abe149e639d10aa8fdb70; wec=295393018; nobtlgn=368510251; ac=67889375%7C379669468%7C35351482; ac=67889375%7C379669468%7C35351482; _gcl_au=1.1.265956817.1663225155; _gid=GA1.2.417218768.1663225156; _gat_UA-240759-1=1; _clck=5maw1g|1|f4w|0; _fbp=fb.1.1663225156547.1723305957; __gads=ID=456fb6dced89a9d4-22af789890d6008a:T=1663225157:S=ALNI_MYgbR1A0Fh3kAwwVwrYjWKMDAYOuA; __gpi=UID=000009c87e7a6399:T=1663225157:RT=1663225157:S=ALNI_MZ4wVT9remS6N-MFKJvbFF1GCqtRg; __cf_bm=XMBuGU25ky6q.8Z_vTFVtdWF.EWPPsrG8Buy1QFgIl4-1663225158-0-AW29ht0HH+iYPhBRF4AU3bmUim5cGJvhNtZuM41NVaC0kWPvnRr4/+1v+n+0Q8iA6SxKD8m9lScYnM8T/HfGonbEoOz84uh83Y7d98O4qe/mVT8Ixv4yya4ZWhzazxOboQ==; _ga=GA1.1.448580854.1663225156; _ga_N9R425YFBJ=GS1.1.1663225155.1.1.1663225167.48.0.0; _clsk=15nbblb|1663225167506|3|1|l.clarity.ms/collect; pgv=4' \
            -H 'Referer: https://www.valueresearchonline.com/register' \
            -H 'Sec-Fetch-Dest: document' \
            -H 'Sec-Fetch-Mode: navigate' \
            -H 'Sec-Fetch-Site: same-origin' \
            -H 'Sec-Fetch-User: ?1' \
            -H 'Upgrade-Insecure-Requests: 1' \
            -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36' \
            -H 'sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"' \
            -H 'sec-ch-ua-mobile: ?0' \
            -H 'sec-ch-ua-platform: "macOS"' \
            --compressed

无效步骤:访问子页面

POST请求(无效)

login2 = Jsoup.connect("https://www.valueresearchonline.com/funds/26123/motilal-oswal-flexi-cap-fund-regular-plan/#fund-portfolio")
                .timeout(15000)
                .userAgent("Mozilla")
                .cookie("PHPSESSID", sessionId2)
                .cookies(login2.cookies())
                .method(Connection.Method.POST)
                .execute();

System.out.println(login2.statusCode());
    doc = login2.parse();
    System.out.println(doc);
 

GET请求(无效)

doc = Jsoup.connect("https://www.valueresearchonline.com/funds/26123/motilal-oswal-flexi-cap-fund-regular-plan/#fund-portfolio")
            .userAgent("Mozilla")
            .timeout(15000)
            .cookies(loginResponse.cookies())
            .get();

Chrome抓包的子页面请求

curl 'https://www.valueresearchonline.com/fund-details/26123/?tab=fund-portfolio' \
      -H 'Accept: application/json, text/javascript, */*; q=0.01' \
      -H 'Accept-Language: en-US,en;q=0.9' \
      -H 'Connection: keep-alive' \
      -H 'Cookie: currency=INR; magnitude=LC; ad=78991d1d28c094ebf1f39eb89bdeba08fa7442fb; ad=78991d1d28c094ebf1f39eb89bdeba08fa7442fb; wec=295383799; nobtlgn=789939331; ac=67886089%7C246429140%7C430534802; ac=67886089%7C246429140%7C430534802; _gcl_au=1.1.695297406.1663222951; _gid=GA1.2.274867828.1663222952; _clck=qcxo6j|1|f4w|0; __cf_bm=bzlNVWAtaJiSxUfJ75njw.Zjxxhm_6NdpHRAnt_yZME-1663222953-0-AZ+JMB1vgmANxPS0dbOP5fijqdwMV2dO8gcChGvTkmBsdjKzFC0dMTF8H7zJFtDVwy16hjeygZ224SUimQNMxPmNjen+nfhLNp9v9dHjxMy/ezpdYYa1rYd+7JGe4RS/lA==; alp=VROL; PERMA-ALERT=0; g_state={"i_t":1663309591263,"i_l":0}; PHPSESSID=adcn3ck7fuinlliqnmqco9d4ep; shop-beta=ee1e0e7e3a3617e78e0827d43a83398fd12221b2; aa=364476%7C372053540%7C953882152; aa=364476%7C372053540%7C953882152; arl=801870920; arl=801870920; _clsk=11pwsr9|1663223225068|10|1|l.clarity.ms/collect; _gat_UA-240759-1=1; pgv=17; _ga_N9R425YFBJ=GS1.1.1663222951.1.1.1663223343.60.0.0; _ga=GA1.1.1796800378.1663222952' \
      -H 'Referer: https://www.valueresearchonline.com/funds/26123/motilal-oswal-flexi-cap-fund-regular-plan/' \
      -H 'Sec-Fetch-Dest: empty' \
      -H 'Sec-Fetch-Mode: cors' \
      -H 'Sec-Fetch-Site: same-origin' \
      -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36' \
      -H 'X-Requested-With: XMLHttpRequest' \
      -H 'sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"' \
      -H 'sec-ch-ua-mobile: ?0' \
      -H 'sec-ch-ua-platform: "macOS"' \
      --compressed
  

问题原因与解决方案

核心原因

  1. 请求目标错误:你访问的带#fund-portfolio的URL是前端锚点,实际登录后可见的“Top Holdings”数据是通过AJAX请求https://www.valueresearchonline.com/fund-details/26123/?tab=fund-portfolio获取的,直接请求原页面不会触发该接口调用。
  2. 请求头缺失:服务器需要通过X-Requested-With: XMLHttpRequest、Accept: application/json, text/javascript, */*; q=0.01等头识别AJAX请求,否则不会返回登录后专属内容。
  3. Cookie传递问题:你在POST请求中同时调用.cookie()和.cookies(),后者会覆盖前者,可能导致Cookie不完整;且仅传递PHPSESSID不够,其他Cookie(如currency、magnitude)也参与状态验证。
  4. 请求方法错误:实际数据接口是GET请求,你用POST不符合服务器预期。

修正后的代码

1. 登录获取完整Cookie

Connection.Response loginResponse = Jsoup.connect("https://www.valueresearchonline.com/login/?")
        .timeout(15000)
        // 使用完整UA,避免服务器拦截
        .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36")
        .data("username", "valid_email")
        .data("password", "valid_password")
        .method(Connection.Method.POST)
        .execute();

// 验证登录状态
System.out.println("登录状态码:" + loginResponse.statusCode());
System.out.println("是否登录成功:" + loginResponse.parse().body().text().contains("Logout"));

2. 请求实际数据接口

Connection.Response portfolioResponse = Jsoup.connect("https://www.valueresearchonline.com/fund-details/26123/?tab=fund-portfolio")
        .timeout(15000)
        .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36")
        .cookies(loginResponse.cookies()) // 传递所有登录返回的Cookie
        .header("Accept", "application/json, text/javascript, */*; q=0.01")
        .header("X-Requested-With", "XMLHttpRequest")
        .header("Referer", "https://www.valueresearchonline.com/funds/26123/motilal-oswal-flexi-cap-fund-regular-plan/")
        .method(Connection.Method.GET)
        .execute();

// 输出返回内容,包含Top Holdings数据
System.out.println("接口状态码:" + portfolioResponse.statusCode());
System.out.println("返回数据:" + portfolioResponse.body());

注意事项

  • 不要简化User-Agent,使用浏览器抓包的完整UA更稳妥;
  • 必须传递所有登录返回的Cookie,不要只提取单个PHPSESSID;
  • 模拟浏览器真实请求流程,先访问子页面主URL,再请求数据接口,可进一步降低被拦截概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:24:25