如何使用 curl 命令下载文件?常用参数与场景全攻略
curl (Client URL) 是一个功能强大的命令行工具,用于通过各种网络协议传输数据。在开发和运维工作中,它最常用的功能之一就是下载文件。本文将带您从零开始,掌握 curl 下载文件的各种姿势。
1. 最简单的下载:直接输出到屏幕
默认情况下,curl 会将下载的内容直接输出到标准输出(终端屏幕)。这对于查看文本文件(如脚本、HTML、JSON)非常有用。
bash
curl http://example.com/file.txt
2. 保存文件:-o 与 -O 的区别
如果您想将下载的内容保存为文件,需要使用 -o (小写) 或 -O (大写) 参数。
使用 -o (小写):指定文件名保存
您可以自定义保存的文件名。
“`bash
将 index.html 下载并保存为 my_page.html
curl -o my_page.html http://example.com/index.html
“`
使用 -O (大写):使用远程文件名保存
如果您希望保存的文件名与服务器上的文件名一致,使用 -O。
“`bash
文件将保存为 release-v1.tar.gz
curl -O http://example.com/download/release-v1.tar.gz
“`
注意:如果 URL 只有域名(如
http://example.com/),使用-O会报错,因为 curl 无法从 URL 中提取文件名。此时必须使用-o。
3. 跟随重定向:-L
很多下载链接会进行 HTTP 重定向(例如从 HTTP 跳到 HTTPS,或短链接跳转)。默认情况下,curl 不会跟随重定向,只会返回 301/302 响应头。使用 -L (Location) 参数可以让 curl 自动跳转。
“`bash
自动跟随跳转并保存文件
curl -L -O http://example.com/redirect-link.zip
“`
4. 断点续传:-C -
下载大文件时,如果网络中断,重新下载非常浪费时间。curl 支持断点续传。
-C <offset>: 指定偏移量。-C -: 让 curl 自动推断偏移量(最常用)。
“`bash
如果 download.iso 下载了一半中断了,运行此命令继续下载
curl -C – -O http://example.com/download.iso
“`
5. 进度条与静默模式
-#:显示进度条
默认的进度表比较详细(包含速度、时间等)。如果您喜欢简单的 # 风格进度条,可以使用 -#。
bash
curl -# -O http://example.com/large-file.zip
-s:静默模式 (Silent)
如果您在脚本中使用 curl,可能不希望看到任何进度或错误信息。
bash
curl -s -O http://example.com/script.sh
组合技巧:如果出错了想看报错,但平时想静默,可以使用 -sS (Silent but Show errors)。
bash
curl -sS -O http://example.com/file.txt
6. 限速下载:--limit-rate
为了避免下载任务占满所有带宽,影响其他服务,可以限制下载速度。
“`bash
将下载速度限制在 200k/s
curl –limit-rate 200k -O http://example.com/large-file.iso
“`
7. 添加认证与 Headers
某些下载需要身份验证或特定的 Header。
Basic Auth
“`bash
使用用户名 user 和密码 pass
curl -u user:pass -O http://example.com/secure-file.zip
“`
自定义 Header
例如模拟浏览器 UA 或添加 API Token。
bash
curl -H "Authorization: Bearer my_token" -H "User-Agent: MyClient/1.0" -O http://api.example.com/data.json
8. 调试连接:-v
如果下载失败,想知道发生了什么(DNS 解析、握手、Header 发送等),使用 -v (verbose) 开启详细模式。
bash
curl -v http://example.com
总结:常用命令速查表
| 场景 | 命令示例 |
|---|---|
| 指定文件名保存 | curl -o filename.ext URL |
| 使用原文件名保存 | curl -O URL |
| 跟随重定向(推荐) | curl -L -O URL |
| 断点续传 | curl -C - -O URL |
| 静默下载(用于脚本) | curl -sS -O URL |
| 限速下载 | curl --limit-rate 1M -O URL |
掌握这些参数,您基本可以应对绝大多数文件下载场景。