🔥 别再死记硬背!Linux 调试必备:curl 常用参数 & 实战模板一键收藏

在日常开发、运维或接口调试中,curl 绝对是 Linux 环境下最趁手的“瑞士军刀”。

但它的参数实在太多,平时用得少,真到排查问题时总是临时查文档,既打断思路又耽误时间。

今天我把日常最高频的参数、实战模板和避坑指南整理成一篇“开箱即用”的速查手册。建议直接收藏,下次调试直接复制粘贴,效率翻倍!👇


📦 一、核心参数速查(按场景分类)

抛弃枯燥的字母表,我们按**“你想做什么”**来分类,一眼就能找到对应参数:

🔹 控制请求方式 & 数据

  • -X POST/PUT/DELETE:指定请求方法(GET 可省略)
  • -d "key=value":发送表单数据,默认自动转为 POST
  • --data-binary:发送二进制数据(不处理换行符)
  • -G:把 -d 的数据拼成 URL 查询参数(用于 GET)
  • -d @data.json强烈推荐,从文件读取请求体,彻底避开命令行转义地狱

🔹 请求头 & 身份认证

  • -H "Content-Type: application/json":自定义请求头
  • -u user:pass:自动处理 Basic 认证
  • -A "Mozilla/5.0...":伪装 User-Agent
  • -b "token=abc" / -c cookies.txt:发送/保存 Cookie

🔹 响应控制 & 下载

  • -v:打印完整通信过程(握手、请求头、响应头、Body)
  • -sS:静默模式+保留错误提示(脚本最安全组合)
  • -I:仅获取响应头(HEAD 请求)
  • -o file.zip / -O:保存到指定文件名 / 按远程文件名保存

🔹 网络 & 安全

  • -L:自动跟随 3xx 重定向(API 调试必加
  • -k:跳过 HTTPS 证书验证(测试环境常用)
  • --connect-timeout 5 / --max-time 10:连接超时 & 总超时(秒)
  • -x http://127.0.0.1:7890:设置代理(配合抓包工具)

💡 二、6 个高频实战模板(直接复制)

1️⃣ GET 请求(带查询参数)

1
2
3
4
5
# 参数少直接拼 URL
curl "https://api.example.com/users?page=1&size=20"

# 参数多时,用 -G + -d 更清晰
curl -G "https://api.example.com/users" -d "page=1" -d "size=20"

2️⃣ POST JSON 请求(接口调试最常用)

1
2
3
4
5
6
7
8
9
# 传统写法(注意用单引号,防止 Shell 展开 $ 或 `)
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123"}'

# 进阶:从文件读取(推荐)
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
-d @payload.json

3️⃣ 携带 Bearer Token + 仅看状态码

1
2
3
4
# 适合写自动化脚本或快速验活
curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer eyJhbGci..." \
https://api.example.com/protected

4️⃣ 下载文件 + 自动重定向 + 静默

1
2
# -s 静默,-S 显示错误,-L 跟随重定向,-o 保存
curl -sSL -o backup.tar.gz https://example.com/download/latest

5️⃣ 模拟表单上传文件(multipart/form-data)

1
2
3
4
curl -X POST https://api.example.com/upload \
-F "file=@/tmp/photo.jpg" \
-F "description=测试图片" \
-F "category=docs"

6️⃣ 完整抓包调试(排查 4xx/5xx 第一步)

1
2
curl -v https://api.example.com/health
# 输出包含:DNS解析 → TCP握手 → TLS协商 → 请求头 → 响应头 → 响应体

🛡️ 三、避坑指南 & 高阶技巧

⚠️ 默认不跟随重定向
测试 301/302 接口务必加 -L,否则只会拿到一个 Location 头,拿不到最终数据。

⚠️ JSON 请求两大坑

  1. 必须显式加 -H "Content-Type: application/json",否则多数后端会按表单解析导致 400。
  2. 命令行 JSON 一定用单引号包裹!双引号里的 $var 会被 Shell 提前替换。

🔧 现代 curl 快捷语法(v7.82+ 已普及)

1
2
curl --json '{"key":"value"}' https://api.example.com
# 等效于自动添加 -H "Content-Type: application/json" -d '...'

🔧 代理调试抓包
-x http://127.0.0.1:8080,配合 Charles / mitmproxy / Fiddler,可实时查看请求原文。

🔧 脚本安全组合
生产脚本中永远使用 curl -sS ...,既干净又能通过 $? 捕获错误退出码。


📊 四、接口性能监控(-w 参数)

想快速评估接口耗时或写监控脚本?-w(write-out)是神器:

1
2
curl -s -w "\nHTTP_CODE: %{http_code}\nTTFB: %{time_starttransfer}s\nTOTAL: %{time_total}s\n" \
-o /dev/null https://api.example.com/health

📌 常用监控变量速查

变量 含义
%{http_code} HTTP 状态码
%{time_total} 总耗时(秒)
%{time_connect} TCP 建连耗时
%{time_starttransfer} 首字节返回时间(TTFB)
%{size_download} 响应体大小(字节)
%{url_effective} 最终请求 URL(含重定向后)

💬 结语

curl 的参数虽多,但日常开发真正高频使用的不到 10%。掌握上面这些模板和避坑点,90% 的接口调试、网络排查、脚本编写都能游刃有余。

📌 建议收藏:下次遇到新接口,直接翻这篇复制模板,省下查文档的时间去喝杯咖啡☕️。

你在实际工作中最常用 curl 做什么场景?或者遇到过什么奇葩的报错?欢迎在评论区留言,我会挑几个典型问题补充到下期实战笔记中。

如果这篇对你有帮助,记得 点赞 + 转发 给团队小伙伴,一起告别命令行焦虑!🚀