curl 命令速查表 - curl HTTP 调试常用命令大全
面向需要通过命令行调接口、复现线上问题、看清一次 HTTP 往返的开发者。浏览器无法表达自定义 Header、POST body、证书校验关闭等诉求,curl 是把"请求长什么样"完全掌握的入口。读完能声明式地构造带 body/header/cookie 的请求,用 -w 拆分 DNS/连接/TTFB 各阶段耗时定位慢在哪里,配合 -v 看清 TLS 握手与重定向链路。
典型使用场景
排障"看一次真实请求"是最典型场景。前端报 400,先用 curl -v 原样重放前端那份请求,看服务端返回与请求头,确认是缺 Content-Type 还是带了多余 Cookie;接口偶发超时,用 curl -w 拆出 time_namelookup/time_connect/time_appconnect/time_starttransfer,定位是 DNS、TCP 连接还是服务端响应慢;需要复现带登录态的线上问题,用 curl -b cookies.txt 带上 cookie,配合 -L 跟完重定向链路拿到真实落地页。写完请求先 -I 只取响应头验证路径,再 -d 提交数据,降低误操作。
基础请求 6
curl https://example.comcurl -X POST https://api.example.comcurl -H "Content-Type: application/json" -H "Authorization: Bearer xxx" https://api.example.comcurl -d '{"k":"v"}' https://api.example.comcurl -d @file.json https://api.example.comcurl -G https://api.example.com --data-urlencode "q=hello world"调试与详情 6
curl -v https://example.comcurl -I https://example.comcurl -L https://example.comcurl -w "%{http_code} %{time_total}\n" -o /dev/null -s https://example.comcurl -s https://example.comcurl --resolve example.com:443:1.2.3.4 https://example.com代理与超时 5
curl -x http://proxy:8080 https://example.comcurl -x socks5h://127.0.0.1:1080 https://example.comcurl --connect-timeout 5 https://example.comcurl --max-time 30 https://example.comcurl --retry 3 https://example.com认证与上传 5
curl -u user:pass https://example.comcurl -F "file=@photo.jpg" https://example.com/uploadcurl -F "file=@photo.jpg" -F "name=tom" https://example.com/uploadcurl -o photo.jpg https://example.com/photo.jpgcurl --cookie "session=abc" https://example.com命令示例
拆解一次请求的各阶段耗时
curl -o /dev/null -s -w "DNS: %{time_namelookup}s\nCONNECT: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTOTAL: %{time_total}s\n" https://example.com/api-o /dev/null 丢弃响应体避免刷屏,-w 输出各阶段耗时。慢在 time_namelookup 是 DNS 解析问题,慢在 time_connect 是网络连通性,慢在 time_starttransfer 说明服务端处理或首字节返回慢。
输出
DNS: 0.012s CONNECT: 0.047s TTFB: 0.213s TOTAL: 0.220s
带 JSON body、自定义 Header 与 Cookie 的 POST
curl -X POST 'https://api.example.com/login' -H 'Content-Type: application/json' -H 'X-Api-Key: abc123' -b 'session=xyz' -d '{"username":"test"}'注意 -d 不会自动设置 Content-Type,需手动加 -H;-b 传入 cookie,-H 可叠加多个自定义头。
本地自签发证书的服务跳过校验
curl -k https://localhost:8443/health-k 只用于本地联调或内网自签证书,生产环境绝不能跳过校验,否则中间人可解读全部流量。
常见坑与注意事项
- -d 默认发送表单格式,POST JSON 必须手动加 -H "Content-Type: application/json",否则服务端可能按表单解析导致 400 或空数据。
- -k 跳过 TLS 校验只适用于本地/内网自签证书;一旦用于生产,HTTPS 形同虚设。
- -X POST 与 -d 组合时,-X 可能覆盖默认的 method 推断;加 -v 确认实际发出的请求方法是否符合预期。
- 监控脚本里 -w time_total 是秒,且 curl 默认无超时,务必配 --max-time 防止进程永久挂起。
- 跟随重定向时用 -L 而非手动改 URL,否则 301/302 落到中转页而非最终资源。
提示
- -d 发 JSON 时记得手动加 -H "Content-Type: application/json",否则服务端可能解析失败。
- 调试 HTTPS 证书问题加 -v 看握手;临时跳过证书校验用 -k,生产环境不要用。
- -w 的 time_total 单位是秒,监控脚本常用 --max-time 兜底防卡死。
常见问题
带 Cookie 或登录态请求怎么用 curl?
一次性带 Cookie 用 curl -b "name=value; token=xxx",只保存服务端返回的 Cookie 用 -c cookies.txt,之后用 -b cookies.txt 复用会话。需要先登录的场景,先跑带 -c 的登录请求,再用 -b 发后续请求即可维持登录态。
需要登录的接口怎么通过浏览器拿到 curl 命令?
按 F12 打开开发者工具 → 切到 Network 面板 → 完成一次需要登录态的请求 → 右键该请求选 Copy as cURL,即可复现所有 Header/Cookie/请求体。把复制的命令里泄露的 Cookie/Token 脱敏后再使用或分享。
POST 提交 JSON 和表单数据分别怎么写?
JSON 用 curl -X POST -d '{"a":1}' -H "Content-Type: application/json",或更简洁的 curl -X POST http://... -d '[{"a":1}]'。表单用 -d "key=value&k2=v2"(Content-Type 自动为 x-www-form-urlencoded)或 -F "file=@a.png"(multipart,支持文件上传)。
curl 访问 HTTPS 报证书错误怎么办?
自签名或内网证书可用 -k(--insecure)跳过校验来排查;但线上请优先修正 CA 或补证书,不要长期用 -k。要指定自定义 CA 用 --cacert path.pem;想忽略代理可加 --noproxy "*"。
怎么判断接口到底慢在网络还是服务端?
用 curl -w "\ntime_namelookup:%{time_namelookup}\ntime_connect:%{time_connect}\ntime_starttransfer:%{time_starttransfer}\ntime_total:%{time_total}\n" -o /dev/null -s URL。其中 time_connect 反映 TCP 握手与网络延迟,time_starttransfer 是收到首个字节(含服务端处理 + TTFB)的耗时,time_total 是整体。分阶段拉长就能定位慢在哪一段。常见写法是 curl -w '%{time_total}\n'。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。