使用JMeter测试Laravel+Livewire站点时Livewire POST请求出现419错误求助
验证CSRF令牌提取正确性
检查正则表达式是否精准匹配到页面中的_token值。比如正确的正则可以写成:name="_token" value="([a-zA-Z0-9]+)",同时在JMeter的「查看结果树」中查看正则提取器的输出,确认${token}变量已成功获取到完整的令牌字符串,无多余字符或空值。确保Session Cookie同步
Laravel的CSRF验证依赖Session Cookie,必须在测试计划中添加HTTP Cookie管理器,确保GET请求获取的Session Cookie被自动携带到后续的Livewire POST请求中。若Cookie未同步,即使令牌正确,服务器也会判定请求无效。检查Livewire专属令牌
Livewire部分场景下除了通用的_token,还会要求携带livewire_token(通常在页面隐藏输入或meta标签中)。查看页面源码,若存在name="livewire_token"的字段或<meta name="csrf-token" content="XXX">标签,需调整正则提取器(比如用正则<meta name="csrf-token" content="([^"]+)">)获取该令牌,并在POST请求中同时携带livewire_token参数。添加Referer请求头
Laravel的CSRF验证会校验Referer头,需在POST请求的HTTP信息头管理器中添加Referer字段,值为对应页面的完整URL(即发起GET请求的页面地址),模拟浏览器的正常请求逻辑。核对请求参数完整性
用浏览器开发者工具(F12)抓取正常的Livewire POST请求参数,对比JMeter中的参数是否一致。Livewire请求通常包含_method、组件名称、操作名等特殊参数,遗漏任何一个都可能触发419错误。临时禁用CSRF验证(仅限测试环境)
若以上方法均无效,且仅在测试环境操作,可临时修改Laravel项目的app/Http/Middleware/VerifyCsrfToken.php文件,将测试路由加入$except数组,跳过CSRF验证。注意:此方法严禁在生产环境使用。
内容的提问来源于stack exchange,提问作者qba

