添加X-Requested-With:XMLHttpRequest头的Jsoup请求无效
问题分析与解决方案
可能原因1:Jsoup自动跟随重定向时丢失请求头
Jsoup默认会自动处理302重定向,但在重定向跳转的后续请求中,不会自动携带你设置的X-Requested-With头。目标网站可能在重定向后的页面校验这个头,导致返回的不是预期的AJAX内容。
解决方法:
禁用自动重定向,手动处理跳转并携带所有必要头:
// 发送初始请求,不跟随重定向 Connection.Response initialResponse = Jsoup.connect(url) .cookies(loginCookies) .header("X-Requested-With", "XMLHttpRequest") .followRedirects(false) .execute(); // 获取重定向目标URL String redirectUrl = initialResponse.header("Location"); // 携带相同头和Cookie请求重定向后的地址 Document page = Jsoup.connect(redirectUrl) .cookies(loginCookies) .header("X-Requested-With", "XMLHttpRequest") .get();
可能原因2:Cookie传递不完整或格式问题
检查loginCookies是否完全包含Postman中发送的所有Cookie,比如是否漏掉csrf-token、sessionId这类关键标识。部分网站会校验Cookie完整性,缺失会触发重定向。
解决方法:
- 对比Postman的Cookie列表,确保
loginCookies的键值对完全一致,注意键名大小写(部分网站区分Cookie键名大小写)。 - 用
initialResponse.cookies()查看Jsoup接收的Cookie,和Postman的内容做差异对比。
可能原因3:缺少必要请求头(如User-Agent)
Postman默认会发送User-Agent头,而Jsoup的默认User-Agent是jsoup/{version},部分网站会通过该头识别非浏览器请求,触发重定向或返回异常内容。
解决方法:
添加和Postman一致的User-Agent头:
Document page = Jsoup.connect(url) .cookies(loginCookies) .header("X-Requested-With", "XMLHttpRequest") .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") // 替换为Postman的User-Agent .get();
可能原因4:请求参数或Referer头缺失
有些AJAX请求看似是GET,实际需要携带隐藏Query参数(如csrf参数),或者网站会校验请求的Referer头是否来自合法页面。
解决方法:
- 检查Postman请求的所有Query参数,确保Jsoup请求完全一致。
- 添加Referer头,指向触发该AJAX请求的原页面URL:
.header("Referer", "https://目标网站的原页面完整URL")
内容的提问来源于stack exchange,提问作者user1821431
相关产品推荐
相关产品推荐

