curl 是什么
curl 是命令行下的 URL 传输工具,支持 HTTP、HTTPS、FTP 等多种协议,几乎所有 Linux 发行版都预装。它的第一种用法是下载:把远端文件取到本地并保留原文件名。第二种用法是排障听诊器:只看响应头、打印状态码、展示握手过程、输出分阶段耗时,用来判断问题出在解析、连接还是服务处理上。在不能装图形工具的服务器上,curl 是最省事的接口调试手段。
基本信息
| 所属 | curl,各发行版普遍预装 |
|---|---|
| 语法 | curl [选项] URL |
| 下载 | 加 -O 用原名保存,-o 指定文件名 |
| 调试 | -I 只看响应头,-v 看握手细节,-w 输出自定义指标 |
| 跳转与校验 | -L 跟随重定向,-k 跳过证书校验仅限排障使用 |
| 退出码 | 非零通常表示传输层失败,便于脚本判断 |
典型使用场景
- 下载安装包:从内网镜像或对象存储取文件并校验大小
- 接口连通性检查:只看状态码,快速判断服务是否可用
- 区分慢在哪一层:用分阶段耗时字段判断是解析、建连还是服务处理慢
- 查看响应头:确认重定向、缓存策略与后端返回的头信息
- 调试带请求体的接口:构造指定方法与请求头做最小复现
- 脚本巡检:把状态码或耗时写入监控与巡检脚本
典型用法
典型用法
curl -LO https://example.com/pkg.tar.gz # 下载并保留原名
curl -I https://example.com # 只看响应头
curl -s -o /dev/null -w '%{http_code}\n' http://10.0.0.10/health # 只输出状态码
curl -s -o /dev/null -w '%{time_connect} %{time_starttransfer} %{time_total}\n' http://10.0.0.10/ # 分阶段耗时
curl -X POST -H 'Content-Type: application/json' -d '{"k":"v"}' http://10.0.0.10:8080/api
curl -v http://10.0.0.10:8080/api 2>&1 | head -30 # 看握手与请求头常用选项读法
| 选项 | 作用 | 使用提示 |
|---|---|---|
| -O | 按远端文件名保存 | 重定向后名字以后端地址为准 |
| -o | 指定保存文件名 | 与 -O 不可混用在同一项上 |
| -I | 只取响应头 | 快速看状态与头字段 |
| -v | 输出握手与请求细节 | 配合 head 截取,输出较长 |
| -L | 跟随重定向 | 不跟随容易误判为 3xx 异常 |
| -k | 跳过证书校验 | 仅排障,不能用于正式流程 |
| -s | 静默模式 | 脚本里配合 -w 输出关键指标 |
| -w | 自定义输出格式 | 可打印状态码与各阶段耗时 |
接口变慢时先用分阶段耗时定位:解析耗时高说明是域名解析问题,建连耗时高指向网络或对端握手,首字节到传输完成之间的耗时高则说明服务处理慢。把这几项打印出来,比反复刷新页面判断要靠得住。
跳过证书校验只能作为定位手段,不能写进正式脚本或交付流程,否则等于放弃对服务端身份的验证。遇到证书报错应先核对系统时间与根证书包是否完整,再确认证书链与域名是否匹配。