curl 一次讲明白:请求、下载与调试,三个常见坑

举报
yd_223785715 发表于 2026/11/11 09:07:21 2026/11/11
【摘要】 在云服务器上排障,curl 是最顺手的工具:测接口通不通、下载文件、下个安装包,基本都靠它。但很多人只会 curl 网址 这一招,遇到 POST、重定向、超时就卡住。下面把最常用的三类用法一次讲明白。 1. 发一个请求:不止能 GET最简单的用法是直接跟网址:curl https://api.example.com/health这会把响应体打出来。想看响应头,加 -i;只看状态码,用 -o ...

在云服务器上排障,curl 是最顺手的工具:测接口通不通、下载文件、下个安装包,基本都靠它。但很多人只会 curl 网址 这一招,遇到 POST、重定向、超时就卡住。下面把最常用的三类用法一次讲明白。

1. 发一个请求:不止能 GET

最简单的用法是直接跟网址:

curl https://api.example.com/health

这会把响应体打出来。想看响应头,加 -i;只看状态码,用 -o /dev/null -s -w "%{http_code}":

curl -i https://api.example.com/health
curl -o /dev/null -s -w "%{http_code}\n" https://api.example.com/health

发 POST 要带方法和数据:

curl -X POST https://api.example.com/login \
  -H 'Content-Type: application/json' \
  -d '{"user":"demo","pass":"123456"}'

-H 加请求头,-d 带请求体。记住:POST JSON 一定要配 Content-Type: application/json,不然服务端很可能按表单解析,直接报 400。

2. 下载文件:-O、-o 和断点续传

下载文件用 -O(按远程文件名保存)或 -o(指定本地文件名):

curl -O https://example.com/package.tar.gz
curl -o /tmp/package.tar.gz https://example.com/package.tar.gz

大文件下载到一半断了,不用从头来,-C - 断点续传:

curl -C - -O https://example.com/bigfile.iso

还有一个容易忽略的:很多下载链接会 301 跳转,curl 默认不跟随,拿到的是一个空的跳转响应。下载前养成加 -L 的习惯:

curl -L -O https://example.com/latest.tar.gz

3. 调试:-v 看全过程,-w 量时间

接口不通,先别猜,用 -v 看完整握手过程:

curl -v https://api.example.com/health

-v 会打出 DNS 解析、TCP 连接、TLS 握手、请求头、响应头。卡在哪一步,一眼就能看出来:DNS 解析失败、连接超时、还是 TLS 证书有问题。

想量化慢在哪,用 -w 输出耗时:

curl -o /dev/null -s -w "DNS:%{time_namelookup} 连接:%{time_connect} 首字节:%{time_starttransfer} 总计:%{time_total}\n" https://api.example.com/health

这四个时间一对比,就知道慢在解析、建连还是服务端处理。

三个常见坑

坑一:忘了 -L,下载到一个空文件。 很多发行版、GitHub release 的下载链接都是 301 跳转。不加 -L,curl 只拿到跳转响应就停了,本地留下一个几百字节的“文件”。下载类命令,-L 默认加上。

坑二:POST 没加 Content-Type,服务端报 400。 -d 发过去的数据默认是 application/x-www-form-urlencoded。接口要 JSON 时,必须显式加 -H 'Content-Type: application/json',否则服务端解析不到字段。

坑三:测内网接口不加超时,命令 hang 住。 服务端没响应时 curl 默认等很久,脚本里一卡就是几分钟。加两个超时兜底:

curl -m 10 --connect-timeout 3 https://api.example.com/health

--connect-timeout 3 是建连最多等 3 秒,-m 10 是整个请求最多 10 秒。写进脚本里尤其重要。

小结

curl 就记住三组:发请求用 -X/-H/-d,下载用 -L/-O/-C -,调试用 -v/-w,再配上超时。把这几组练熟,服务器上九成的接口调试和下载任务都不用再装别的工具。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。