curl 与 wget 实战:调接口、下载文件与断点续传
curl 和 wget 都能发 HTTP 请求、都能下载文件,为什么大多数系统里两个都有?因为它们的设计目标不同:curl 是数据传输的瑞士军刀,调接口、看响应头、在脚本里取数据都靠它;wget 是专职下载器,断点续传、批量下载是它的主场。分清分工,用起来就不纠结。
这是 Linux 命令系列的一篇,承接 Linux 常见命令与工具地图;网络连通性诊断那篇 的排查流程里,确认网络和 DNS 都正常后验证”服务本身有没有响应”,用的正是 curl。
curl 的默认行为:发 GET,结果打到屏幕
curl 不带任何参数时发 GET 请求,把响应体原样打印到标准输出——不落盘。这个默认行为正是它适合调试的原因:请求发出去,响应立刻看得见,还能直接接管道处理:
1 | curl https://api.example.com/health |
curl 调接口:高频参数
1 | curl -I https://example.com |
curl 下载文件
1 | curl -o app.tar.gz https://example.com/download/app-v2.tar.gz |
偶尔下载一两个文件,curl -O 够用;但要断点续传、批量下载,就该换 wget 了。
curl -sSL | sh:装软件时最常见的组合
很多开源工具的官方安装方式都是这个模式——curl 拉下安装脚本,直接通过管道交给 shell 执行:
1 | curl -sSL https://example.com/install.sh | sh |
-sSL 三个参数几乎总是绑在一起出现,可以当成固定搭配记。另外提醒一句:这个模式等于”把远程内容直接交给 shell 执行”,只对信任的官方源用;对来路不明的脚本,先把 | sh 去掉,把内容下载下来看一眼再决定跑不跑。
wget 的默认行为:直接存成文件
wget 和 curl 的默认行为正相反:不带参数就把 URL 内容保存成本地文件(文件名取自 URL),从设计上就是给”下载”这个场景准备的。macOS 自带 curl 但不自带 wget,需要 brew install wget:
1 | wget https://example.com/download/app-v2.tar.gz |
怎么选:一句话分工
- 调接口、看响应头、脚本里取数据、健康检查——用
curl,默认输出到 stdout 天生适合这些场景 - 下载大文件要断点续传、批量抓取——用
wget,-c和-r是curl没有的便利 - 只是偶尔下载个小文件,两者都行,
curl -O和wget等价,用系统里现成的那个(macOS 现成的是curl)
常用参数速查表
| 命令/参数 | 作用 |
|---|---|
curl URL |
发 GET,响应体打印到终端 |
curl -I |
只看响应头(HEAD 请求) |
curl -v |
显示完整请求/响应过程,调试用 |
curl -X 方法 |
指定请求方法(POST/PUT/DELETE 等) |
curl -H "头: 值" |
添加请求头,可写多次 |
curl -d '数据' |
发送请求体,同时自动把方法切成 POST |
curl -L |
跟随重定向,默认不跟随 |
curl --max-time N |
整个请求的超时上限(秒) |
curl -o 文件 |
响应体保存为指定文件名 |
curl -O |
响应体保存为远端 URL 里的文件名 |
curl -s |
静默模式,关掉进度条和统计信息 |
curl -S |
配合 -s:静默但请求失败时仍显示错误 |
curl -sSL url | sh |
安装脚本固定搭配:以上三个参数连用 + 管道执行 |
curl -w "%{http_code}" |
输出状态码等元信息 |
wget URL |
下载保存为文件(默认行为) |
wget -c |
断点续传 |
wget -P 目录 |
指定保存目录 |
wget -r |
递归下载,把页面里链接的资源一并抓下来 |
wget --no-parent |
配合 -r:不向上层目录爬,限制递归范围 |
写到这里
记住两个默认行为就分清了:curl 默认打到屏幕(所以是调试工具),wget 默认存成文件(所以是下载器)。调接口的高频参数就 -I/-v/-H/-d/-L 这几个,下载大文件认准 wget -c,其余参数用到时查表即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Code Water!










