You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中使用CURL发起POST请求遇页面过期错误的解决咨询

解决Laravel API中CURL POST请求的CSRF Token验证问题

嘿,我来帮你搞定这个“页面因闲置过期”的问题!这个错误本质就是Laravel的CSRF保护机制在拦截你的请求——因为你没带上和Session绑定的有效Token,或者Token的传递方式不对。下面一步步教你正确配置:

核心原理先搞懂

Laravel的CSRF Token是和用户Session绑定的,所以光传Token不行,还得带上对应的Session Cookie,不然Laravel没法验证这个Token是不是属于当前会话的。

步骤1:先获取Session Cookie和CSRF Token

Laravel自带了一个专门用来获取CSRF Token的路由/csrf-cookie,用它来拿到Session和Token的Cookie:

curl -c cookies.txt http://localhost:8000/csrf-cookie

这里的-c cookies.txt是把响应里的Cookie(包括Session ID和XSRF-TOKEN)保存到本地的cookies.txt文件里,后面的请求必须带上这个文件里的Cookie。

步骤2:提取有效的CSRF Token

你可以直接查看cookies.txt里的XSRF-TOKEN值,或者用命令快速提取(注意Cookie里的Token是URL编码的,要转成正常格式):

cat cookies.txt | grep XSRF-TOKEN | awk '{print $7}' | sed 's/%3D/=/g'

执行完这个命令会输出解码后的Token,把它记下来。

步骤3:带着Cookie和Token发送POST请求

Laravel默认会识别X-XSRF-TOKEN请求头(对应Cookie里的XSRF-TOKEN),所以你的CURL命令要改成这样:

curl -b cookies.txt -H "X-XSRF-TOKEN: 刚才提取的Token值" -X POST -d '{"data": "你的请求数据"}' http://localhost:8000/api

重点提醒:

  • -b cookies.txt必须加,用来带上之前获取的Session Cookie,否则Token验证会失败
  • 头字段的格式要规范,冒号后面不要加多余空格(比如你原来的X-CSRF-TOKEN : token里的空格会导致识别错误)
  • 如果你的请求是表单格式(不是JSON),也可以在请求体里加_token=你的Token值,比如:
    curl -b cookies.txt -X POST -d '_token=刚才提取的Token值&data=你的请求数据' http://localhost:8000/api
    

额外注意点

如果你的API路由是放在routes/api.php里的,默认Laravel的api中间件组是没有启用CSRF保护的,如果你还遇到这个错误,大概率是:

  • 你把API路由误放在了routes/web.php里(web路由默认启用CSRF保护)
  • 你手动给API路由添加了VerifyCsrfToken中间件

如果不需要在API里启用CSRF保护,把路由移到routes/api.php就行;如果确实需要启用,就按上面的步骤来。

内容的提问来源于stack exchange,提问作者Sagar Shinde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:45:47