使用JMeter对Laravel应用负载测试时登录POST请求返回419错误如何解决
JMeter测试Laravel登录返回419响应码的解决配置方案
Laravel返回419状态码的核心原因是CSRF令牌校验失败,按照以下步骤调整配置即可解决:
- 第一步:添加HTTP Cookie管理器
直接在测试计划对应线程组下添加HTTP Cookie管理器,保持默认配置即可。Laravel的CSRF令牌与用户session绑定,缺少Cookie管理器会导致GET请求和POST请求的session不关联,即使令牌提取正确也会校验失败。 - 第二步:校验CSRF令牌提取逻辑
你可以通过两种方式提取令牌,任选其一即可:- 从GET登录页的响应meta标签提取,正则表达式参考:
<meta name="csrf-token" content="(.+?)">,提取匹配组1的值作为令牌变量 - 从GET请求返回的
Set-Cookie头中提取XSRF-TOKEN值,注意该值默认是URL编码的,后续使用时需要解码
提取完成后可添加调试后置处理器,打印提取到的令牌变量值,确认没有多余字符、提取逻辑正确。
- 从GET登录页的响应meta标签提取,正则表达式参考:
- 第三步:调整请求头配置
在Header Manager中添加以下两项配置:- 键为
X-XSRF-TOKEN,值为${__urldecode(${你提取的令牌变量名})}(如果是从meta标签提取的令牌则不需要urldecode,直接填变量名即可) - 键为
Content-Type,值要与手动请求保持一致,表单提交填application/x-www-form-urlencoded,JSON提交填application/json
可选补充:添加Referer头,值为登录页的GET请求地址,避免部分站点的Referer校验拦截。
- 键为
- 第四步:对齐请求体配置
如果你手动发起的登录请求是把令牌放在表单参数中传输,除了请求头配置外,也可以直接在POST请求的参数列表中添加_token字段,值为你提取到的令牌变量,两种传参方式满足一种即可。 - 第五步:确认请求执行顺序
线程组内的执行顺序必须为:GET登录页请求 → 提取令牌 → POST登录请求,两个请求必须同属一个线程组,保证Cookie和令牌的关联关系正确。
排查小技巧:可以把JMeter发出的POST请求头、请求体和开发者工具中手动请求的内容逐行对比,重点排查令牌值、Cookie字段、Content-Type是否完全一致。
内容的提问来源于stack exchange,提问作者Georgescu Rares Daniel
相关产品推荐
相关产品推荐

