关闭http_parse_post后,$request->post始终为空数组,即使客户端发送x-www-form-urlencoded数据;必须关闭的场景是处理json/xml等非表单请求且需手动解析原始body,此时应改用$request->rawcontent()读取并自行解析。

关闭 http_parse_post 后,$request->post 会永远为空,哪怕客户端发了标准的 x-www-form-urlencoded 数据。
什么时候必须关掉 http_parse_post
你正在处理非表单类 POST 请求,比如前端用 fetch 发送 JSON、XML 或自定义二进制体,但又想自己解析原始 body —— 此时 Swoole 默认的 POST 解析会干扰你。
- 默认开启时,Swoole 会检查
Content-Type: application/x-www-form-urlencoded,自动把 body 拆成键值对塞进$request->post - 一旦关掉,
$request->post始终是空数组,但$request->rawContent()仍可拿到完整原始 body 字节流 - 注意:关掉不影响
$request->get、$request->cookie或 header 解析
怎么设置它?只在 server->set() 里配,不能运行时改
必须在启动前通过 set() 方法一次性配置,回调里或运行中调用无效:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
<pre class="brush:php;toolbar:false;">$server = new Swoole\Http\Server('0.0.0.0', 9501);
$server->set([
'http_parse_post' => false,
]);
$server->on('request', function ($request, $response) {
// 这里 $request->post 总是 []
$body = $request->rawContent(); // 你要自己 json_decode($body) 等
});
容易踩的坑:关了却忘了读 rawContent()
常见错误现象:POST 请求进来后,既没看到 $request->post 数据,也没手动取 rawContent(),结果整个请求体“消失”了。
-
rawContent()只能调用一次;协程内多次调用返回空字符串 - 如果用了
http_parse_cookie => false,同理也要手动解析Cookieheader - 上传文件不受影响,
http_parse_post不控制files解析逻辑
真正要小心的是:这个开关一关,就彻底交出解析权,后续所有逻辑都得自己兜底 —— 尤其是兼容旧接口时,别只关不补解析代码。










