$request->get是swoole http server中已自动解析并urldecode的只读get参数数组,不依赖$_get,与请求方法无关,仅源自url查询字符串。

request对象的get属性直接拿GET参数
在 Swoole HTTP Server 的 onRequest 回调中,$request 是一个 Swoole\Http\Request 实例,它的 get 属性就是个关联数组,已经自动解析好 URL 查询字符串(query string)了。
比如请求是 GET /api/user?id=123&name=foo,直接访问:
$id = $request->get['id'] ?? null; $name = $request->get['name'] ?? '';
注意:$request->get 是只读数组,不能写入;它不包含 POST 表单数据或 JSON body,也不受 $_GET 超全局影响(Swoole 不依赖 PHP CGI 环境)。
URL 编码和中文参数要小心
$request->get 内部已调用 urldecode(),但前提是原始 URL 符合标准编码格式。如果客户端发来未编码的中文(如 ?q=你好),PHP 会把它当乱码塞进数组,后续取值可能为空或报错。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 确保前端用
encodeURIComponent()编码参数,例如q=%E4%BD%A0%E5%A5%BD - 服务端不要手动再
urldecode()—— 重复解码会导致乱码 - 若必须兼容非标请求,可用
parse_str($request->server['query_string'] ?? '', $raw)手动解析原始 query 字符串
跟 $_GET 完全无关,别混用
Swoole HTTP Server 运行在常驻内存模式,不走 PHP-FPM 或 CLI 的传统生命周期,$_GET 始终为空或不可靠。以下写法是错的:
// ❌ 错误:$_GET 在 Swoole 中基本没用 $id = $_GET['id'] ?? null; // ✅ 正确:只用 $request->get $id = $request->get['id'] ?? null;
另外,$request->server['query_string'] 只是原始字符串(如 id=123&name=foo),不含解码逻辑,适合调试或特殊解析场景,但日常开发直接用 $request->get 更安全。
POST 请求里也能读到 GET 参数吗?
能。只要 URL 上带查询参数(比如 POST /login?source=app),$request->get 就包含它们——和 HTTP 方法无关,只看 URL 本身是否有 ? 后的内容。
- GET/POST/PUT/DELETE 都一样适用
-
$request->post和$request->get是两个独立数组,互不影响 - 若 POST body 是 JSON,
$request->post仍为空,得自己读$request->rawContent()解析
真正容易被忽略的是:query string 的解析发生在请求进入时,一旦 $request 对象创建完成,$request->get 就固定了,后续改 URL 也无效——毕竟这不是浏览器地址栏,而是网络层已接收的数据包。










