curl 命令速查表 - curl HTTP 调试常用命令大全

面向需要通过命令行调接口、复现线上问题、看清一次 HTTP 往返的开发者。浏览器无法表达自定义 Header、POST body、证书校验关闭等诉求,curl 是把"请求长什么样"完全掌握的入口。读完能声明式地构造带 body/header/cookie 的请求,用 -w 拆分 DNS/连接/TTFB 各阶段耗时定位慢在哪里,配合 -v 看清 TLS 握手与重定向链路。

Web 服务·共 22 条命令·最后更新 2026-07-21
curlhttp接口调试命令行

典型使用场景

排障"看一次真实请求"是最典型场景。前端报 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.com
发起 GET 请求,默认输出响应体到终端
curl -X POST https://api.example.com
指定请求方法,POST/PUT/DELETE 等
curl -H "Content-Type: application/json" -H "Authorization: Bearer xxx" https://api.example.com
添加请求头,可多次 -H 叠加
curl -d '{"k":"v"}' https://api.example.com
发送 POST body,默认 Content-Type 为 application/x-www-form-urlencoded
curl -d @file.json https://api.example.com
从文件读取 body 内容发送
curl -G https://api.example.com --data-urlencode "q=hello world"
把参数拼到 URL 查询串并做 URL 编码

调试与详情 6

curl -v https://example.com
显示完整请求/响应头和握手过程,排障首选
curl -I https://example.com
只看响应头,快速验证状态码和缓存头
curl -L https://example.com
跟随 301/302 重定向,加 --max-redirs 限制次数
curl -w "%{http_code} %{time_total}\n" -o /dev/null -s https://example.com
只输出状态码和总耗时,做监控探测常用
curl -s https://example.com
静默模式,不显示进度和错误,配合 -o 落盘
curl --resolve example.com:443:1.2.3.4 https://example.com
指定域名解析 IP,绕过 DNS 调试负载均衡和证书

代理与超时 5

curl -x http://proxy:8080 https://example.com
走 HTTP 代理
curl -x socks5h://127.0.0.1:1080 https://example.com
走 SOCKS5 代理,h 表示 DNS 也走代理
curl --connect-timeout 5 https://example.com
连接建立超时 5 秒,防止卡死
curl --max-time 30 https://example.com
整个请求最大耗时 30 秒,含连接和传输
curl --retry 3 https://example.com
失败自动重试 3 次

认证与上传 5

curl -u user:pass https://example.com
HTTP Basic 认证
curl -F "file=@photo.jpg" https://example.com/upload
上传文件,multipart/form-data 格式
curl -F "file=@photo.jpg" -F "name=tom" https://example.com/upload
同时上传文件和表单字段
curl -o photo.jpg https://example.com/photo.jpg
保存响应体到文件,下载大文件用
curl --cookie "session=abc" https://example.com
携带 Cookie,-c 写入 -b 读取 cookie 文件

命令示例

拆解一次请求的各阶段耗时

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日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们