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 了。
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 -H -d |
加请求头、发请求体(-d 自动切 POST) |
curl -L |
跟随重定向,默认不跟随 |
curl --max-time N |
整个请求的超时上限(秒) |
curl -o 文件 / -O |
保存为指定文件名 / 用远端文件名 |
curl -w "%{http_code}" |
输出状态码等元信息 |
wget URL |
下载保存为文件(默认行为) |
wget -c |
断点续传 |
wget -P 目录 |
指定保存目录 |
wget -r --no-parent |
递归下载,限制不爬上层 |
写到这里
记住两个默认行为就分清了:curl 默认打到屏幕(所以是调试工具),wget 默认存成文件(所以是下载器)。调接口的高频参数就 -I/-v/-H/-d/-L 这几个,下载大文件认准 wget -c,其余参数用到时查表即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Code Water!









