TL;DR
curl 是调试 HTTP/API 的第一工具。最常用:curl -sS URL、curl -X POST -d '{}' -H 'Content-Type: application/json' URL、curl -w '%{http_code}'。
基础请求
| 需求 | 命令 |
|---|---|
| GET 并显示响应头 | curl -i URL |
| 静默模式(不显示进度) | curl -sS URL |
| 只看响应头 | curl -I URL |
| 跟随重定向 | curl -L URL |
| 输出到文件 | curl -o file.txt URL / -O(按远程文件名) |
带数据请求
| 需求 | 命令 |
|---|---|
| POST JSON | curl -X POST -H 'Content-Type: application/json' -d '{"k":"v"}' URL |
| 表单提交 | curl -d 'k=v&k2=v2' URL |
| 上传文件 | curl -F 'file=@./a.txt' URL |
| 自定义请求头 | curl -H 'Authorization: Bearer TOKEN' URL |
| Cookie | curl -b 'name=value' URL / -c cookies.txt 保存 |
实用参数
| 参数 | 作用 |
|---|---|
-w '%{http_code}\n' | 只输出状态码 |
--max-time 10 | 超时(秒) |
--connect-timeout 5 | 连接超时 |
-k / --insecure | 跳过 TLS 校验(仅调试) |
-x http://host:port | 走代理 |
--limit-rate 1M | 限速 |
-A 'UA' | 自定义 User-Agent |
-u user:pass | 基础认证 |
高频排查
- 返回 000 = 连接失败/超时,先试
--max-time和-v; -v查看握手与请求头细节;curl -s -o /dev/null -w '%{http_code}'是脚本里检查状态码的标准写法。
常见问题
curl 返回 000 是什么原因?
000 表示连接失败或超时(不是 HTTP 状态码)。先用 curl -v URL 看卡在哪一步,再按需加 --connect-timeout 5、--max-time 10;仅调试场景才用 -k 跳过 TLS 校验。
curl 怎么发送 POST JSON 请求?
curl -X POST -H 'Content-Type: application/json' -d '{"k":"v"}' URL。注意 -d 默认按表单发送,POST JSON 必须带 Content-Type: application/json。
curl 怎么下载文件?
curl -o 文件名 URL 指定保存名;curl -O URL 使用远程文件名;下载大文件加 -L 跟随重定向和 --max-time 防止挂死。
curl 怎么只输出 HTTP 状态码?
curl -s -o /dev/null -w '%{http_code}' URL,这是脚本检查接口是否返回 200 的标准写法。
curl 报 SSL certificate problem 怎么处理?
先更新系统证书(apt install ca-certificates 或系统更新),不要一上来就 -k;仅调试场景才用 --insecure 跳过校验。
来源
- curl 官方文档(curl.se/docs/manpage.html)