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

