首页/系统/信创系统运维速查/curl 下载与接口调试
命令与包管理65 条

curl 下载与接口调试

curl 既能下载文件(-O/-o),也是排查 HTTP 问题的听诊器:看状态码、响应头、重定向与证书细节。

信创系统运维速查系统更新于 2026-10-13

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自定义输出格式可打印状态码与各阶段耗时
接口变慢时先用分阶段耗时定位:解析耗时高说明是域名解析问题,建连耗时高指向网络或对端握手,首字节到传输完成之间的耗时高则说明服务处理慢。把这几项打印出来,比反复刷新页面判断要靠得住。
跳过证书校验只能作为定位手段,不能写进正式脚本或交付流程,否则等于放弃对服务端身份的验证。遇到证书报错应先核对系统时间与根证书包是否完整,再确认证书链与域名是否匹配。

易错点

  • 遇到证书错误就用跳过校验应付过去,把真实的证书链或时间问题掩盖在下线之后
  • 跟随重定向与保存原名组合使用时忽略最终地址,保存下来的文件名与预期不一致
  • 脚本里不加静默选项,下载进度输出污染日志,解析结果时被干扰
  • 只看能否返回内容、不看状态码,接口返回错误页也算成功,巡检形同虚设

数据来源与参考

  • curl 官方文档
  • HTTP 协议基础
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌