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

Docker化Laravel服务器拒绝POST请求,CSRF验证失败求助

Laravel CSRF 验证失败问题求助

我做了一个可完全复现的REST API Laravel服务器Docker镜像,Dockerfile内容如下:

FROM php
RUN apt-get update
RUN apt-get install zip -y
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN composer create-project laravel/laravel frontend
WORKDIR frontend
COPY web.php web.php
RUN mv web.php routes
EXPOSE 8000
CMD [ "php", "artisan", "serve", "--host", "0.0.0.0" ]

仅修改了路由文件web.php,内容如下:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return csrf_token();
});

Route::post('/', function (Request $request) {
    if ($request->hasFile('source'    )) { return ">> GOOD ! <<"; }
    if ($request->hasFile('input.json')) { return ">> GOOD ! <<"; }

    $x = count($_FILES);

    return "DD >> $x << DD";
});

我按以下步骤构建并运行Docker镜像:

$ docker build --tag host.translator.php --file Dockerfile .
$ docker run -p 8008:8000 -d -t --name translator.php host.translator.php

之后尝试获取CSRF token:

$ Set-Variable -Name X -Value (curl.exe -X GET -F "source=@input.json" http://127.0.0.1:8008/)
# X存储了token:
# echo $X
# U263lUv3dz9PH7ySm3GmgUUjHjjWm78cqofODUmh

但用这个token发起POST请求时,返回页面过期错误:

$ curl.exe --header "X-CSRFToken:$X" -X POST -F "source=@input.json" http://127.0.0.1:8008/ | Select-String "<title>Page Expired"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6851    0  6609  100   242  80486   2947 --:--:-- --:--:-- --:--:-- 83548

        <title>Page Expired</title>

补充尝试:我尝试用cookie存储会话信息后重新获取token再发起请求,仍然返回页面过期:

#
# 使用新变量Z确保无问题...
#
$ Set-Variable -Name Z -Value (curl.exe -b cookiejar -X GET -F "source=@input.json" http://127.0.0.1:8008/)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   282    0    40  100   242    527   3194 --:--:-- --:--:-- --:--:--  3760
$ echo $Z # 看起来正常,对吗?
aHvU5WOaGs9qxOIzgdYb90TJUKPDgDaNhYjQNALW
#
$ type .\cookiejar # 看起来...嗯...正常(我认为?)
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_127.0.0.1     FALSE   /       FALSE   1711103819      laravel_session eyJpdiI6IllsOW9KdlVzT1ZPcUJDOUdQRnUyZHc9PSIsInZhbHVlIjoiekpING13WFRaaDRLUHBUcVpNM0VjblBwVjlXM1VrSU1uYUF3dk43d0J6c0RvSDJ5UWZOU3lla1lKVjBNRnNVTXJOaTNMdmt3dlIvdW5HZDk1ODZUb0gxVWMySHh5cXBWeG5XbjVMQlpMQ2xoMzM0ODROQ1FGQ0NMQzFNaHNQMXMiLCJtYWMiOiI0MTg3ZTM0NTlmNWMzZGUyZDY3YzI2YWViYzc2MDZhMjAyMjA2NzE5YmRmYTRmYWRmYzQxODIzYmVlOThlZTkxIiwidGFnIjoiIn0%3D
#
# 现在满怀期待尝试!
#
$ curl.exe -c cookiejar --header "X-CSRFToken:$Z" -X POST -F "source=@input.json" http://127.0.0.1:8008/ | Select-String "<title>Page Expired"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6851    0  6609  100   242  85705   3138 --:--:-- --:--:-- --:--:-- 87833
242  83137   3044 --:--:-        <title>Page Expired</title>- --
:--:-- --:--:-- 85637

恳请各位提供帮助,非常感谢!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:27:50