告别复制粘贴:用 curl + jq 在终端里优雅调试 HTTP 接口

举报
yd_252225969 发表于 2026/10/24 09:52:51 2026/10/24
【摘要】 日常开发中,调试 HTTP 接口是家常便饭。很多人习惯打开 Postman 或浏览器插件,点点点填参数;也有人直接在终端里敲 curl,却被一屏幕未经格式化的 JSON 淹没,来回复制粘贴找字段。其实只要把 curl 和 jq 组合起来,终端就能变成一个轻量又高效的接口调试台。 一、先把 curl 用顺手curl 的参数很多,调试接口常用的其实就几个:-s:静默模式,去掉进度条干扰-i:把响...

日常开发中,调试 HTTP 接口是家常便饭。很多人习惯打开 Postman 或浏览器插件,点点点填参数;也有人直接在终端里敲 curl,却被一屏幕未经格式化的 JSON 淹没,来回复制粘贴找字段。其实只要把 curl 和 jq 组合起来,终端就能变成一个轻量又高效的接口调试台。

一、先把 curl 用顺手

curl 的参数很多,调试接口常用的其实就几个:

  • -s:静默模式,去掉进度条干扰
  • -i:把响应头也打印出来,排查鉴权问题很有用
  • -X:指定请求方法
  • -H:添加请求头
  • -d:发送请求体
  • -w:自定义输出格式,比如只看耗时和状态码

举个例子,查询一个用户信息接口:

curl -s -i -H "Authorization: Bearer <token>" https://api.example.com/users/1001

加上 -i 能一眼看到返回的状态码和 Content-Type:接口是 401 还是 500,先看头再看体,排查思路会清晰很多。

二、让 jq 接管 JSON

curl 拿到的响应体往往是一整行压缩过的 JSON,肉眼几乎无法阅读。这时把输出通过管道交给 jq:

curl -s https://api.example.com/users/1001 | jq .

一个点号就能把 JSON 格式化打印,层级缩进一目了然。更进一步,可以直接提取字段:

curl -s https://api.example.com/users/1001 | jq '.data.nickname'

jq 支持管道、过滤和映射,比如只看数组里每个元素的名字和 id:

curl -s https://api.example.com/users | jq '.data[] | {id, nickname}'

三、实战:一次登录,多次调用

很多接口需要先登录拿 token,再带着 token 调业务接口。手动复制 token 既麻烦又容易过期,可以写成两行脚本:

TOKEN=$(curl -s -X POST https://api.example.com/login \
  -H "Content-Type: application/json" \
  -d '{"username":"demo","password":"demo123"}' | jq -r '.data.token')

curl -s -H "Authorization: Bearer $TOKEN" \
  https://api.example.com/orders | jq '.data.orders[] | {id, amount, status}'

jq -r 输出原始字符串,去掉引号,正好用来拼接请求头。token 存进变量,后续调用直接复用,一套登录逻辑可以支撑整个联调过程。

四、几个提效小技巧

1. 用 -w 只看关键指标。 想知道接口慢不慢,不用每次都翻完整响应:

curl -s -o /dev/null -w "状态码:%{http_code} 耗时:%{time_total}s\n" https://api.example.com/health

2. 把环境收敛到变量。 开发、测试、生产三套域名容易敲错,在脚本开头定义 BASE_URL,切换环境只改一行。

3. 封装成 shell 函数。 把常用的"带 token 请求"写成函数放进 .bashrc:

api() { curl -s -H "Authorization: Bearer $TOKEN" "$BASE_URL$1" | jq .; }

以后调试就只剩一句:api /orders?page=1。

五、小结

curl 负责发请求,jq 负责看数据,两者经由管道衔接,形成一条完整的"请求—解析—再请求"闭环。相比图形化工具,这套组合的优势在于可脚本化、可复用:今天随手写的两行命令,明天就能沉淀为团队的调试脚本。下次再遇到接口联调,不妨先在终端里试试这套组合,效率提升会很直观。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。