直接用 curl 测试 Hyperf 接口是最快验证路由是否生效、响应结构是否符合预期的方式,无需浏览器或前端页面;需确认服务监听端口、路由路径严格匹配、请求方法与参数格式正确,并通过 curl -v 查看详细请求响应定位问题。

直接用 curl 测试 Hyperf 接口是最快验证路由是否生效、响应结构是否符合预期的方式,不需要启浏览器或写前端页面。
确认服务已启动且监听正确端口
Hyperf 默认监听 0.0.0.0:9501,但实际端口可能被配置覆盖。先检查 config/autoload/server.php 中的 settings.port 值,再确认进程确实在跑:
- 执行
php bin/hyperf.php start后,终端应出现[INFO] Worker#0 started.类似日志 - 运行
netstat -tuln | grep :9501(Linux/macOS)或netstat -ano | findstr :9501(Windows),确认端口处于LISTEN状态 - 若改过端口(比如设为
8080),curl地址必须同步更新,否则 404 或连接拒绝
构造 curl 请求时绕开常见 404
Hyperf 的路由匹配严格区分 method、path 和参数格式,curl 写错一个字符就 404:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
- GET 请求带查询参数时,
?和=必须 URL 编码或用单引号包裹,避免 shell 解析错误:curl 'http://127.0.0.1:9501/index/info?id=1' - POST 请求需显式指定
-X POST和-H "Content-Type: application/json",否则默认以application/x-www-form-urlencoded发送,后端可能收不到json_decode($request->getBody()) - 路径末尾斜杠敏感:注册的是
/user/list,访问/user/list/就 404(除非开了enable_static_handler或自定义了 trailing slash 处理) - 注解路由未生效?检查控制器类是否加了
#[AutoController]或#[Controller],且命名空间和文件路径与自动扫描规则一致(默认扫App\Controller\**)
快速判断是路由问题还是逻辑问题
响应状态码和 body 内容能直接定位问题层级:
-
curl -I http://127.0.0.1:9501/xxx(仅看 header):返回HTTP/1.1 404 Not Found→ 路由未注册或路径错;返回200但 body 为空 → Controller 方法没 return 或抛了未捕获异常 - 返回
{"code":500,"message":"id无效"}这类结构 → 路由通了,业务逻辑主动 throw 或调用了fail(),说明AbstractController或中间件已生效 - 返回空白或
500 Internal Server Error无 JSON → 检查日志:runtime/logs/hyperf.log里是否有Fatal error或未 catch 的异常,常见于依赖注入失败、配置缺失(如 Redis 连接不上却硬调$this->redis->get())
带 Cookie 或 Header 的调试请求
某些接口依赖登录态或特定 header(如 X-Request-ID、Authorization),curl 必须显式带上:
- 设置 Cookie:
curl -H "Cookie: PHPSESSID=abc123" http://127.0.0.1:9501/user/profile - 传 Token:
curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." http://127.0.0.1:9501/api/v1/order - 模拟 JSON 请求体:
curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' http://127.0.0.1:9501/user/create - 注意:Hyperf 默认不解析
application/x-www-form-urlencoded的 POST body,如果前端用表单提交,后端得用$request->input('key')而非json_decode()
真正卡住的往往不是语法,而是端口没起来、路径少了个字母、header 拼错了大小写——curl -v 开启详细模式,一眼看到请求发去了哪、服务回了啥,比翻日志快得多。


















