JMeter二次请求持续返回302而非200,需获取phpsessionid求解决
解决方法
确认Location提取的完整性
检查第一个请求的Location响应头提取逻辑,确保提取的是完整的绝对URL(包含http/https协议、域名、完整路径),避免提取相对路径导致第二个请求的目标地址错误。可以用正则表达式提取器,正则式比如Location: (.*),勾选Template $1$,同时在查看结果树中验证提取的变量值是否正确。保持请求方法一致性
307重定向要求后续请求保持原请求的方法(比如原请求是POST,后续请求也必须用POST)。检查第二个请求的方法是否与第一个请求一致,不要默认使用GET,否则服务器可能返回302重定向而非200。确保Cookie正确传递
- 确保测试计划中添加了
HTTP Cookie管理器,保持默认自动处理Cookie的设置即可。 - 查看第一个请求的响应头,确认是否有Set-Cookie字段;若有,检查Cookie管理器是否已捕获这些Cookie,确保第二个请求发送时携带了这些Cookie。可以在查看结果树中查看第二个请求的请求头,确认Cookie字段存在且内容正确。
- 确保测试计划中添加了
关闭自动跟随重定向并手动处理
- 两个请求都关闭
自动跟随重定向和跟随重定向选项(在请求的「高级」标签中)。 - 当第二个请求返回302时,提取其Location响应头,添加第三个请求访问该地址——部分服务器会通过多次重定向验证会话合法性,完成所有重定向流程后才会返回200并生成phpsessionid的Set-Cookie。
- 两个请求都关闭
检查请求头的完整性
部分服务器会验证请求头的完整性(如Referer、User-Agent等):- 添加
HTTP信息头管理器,复制浏览器访问目标地址时的请求头(如User-Agent、Referer、Accept等)到JMeter中。 - 确保Referer头设置为第一个请求的原始URL,避免服务器因Referer不合法返回重定向。
- 添加
验证请求参数的正确性
如果第一个请求是POST请求,检查是否有表单参数或请求体需要传递到第二个请求中。部分服务器会验证请求参数的连续性,缺少必要参数会触发重定向。
内容的提问来源于stack exchange,提问作者Harish Dhande
相关产品推荐
相关产品推荐

