Curl 下载文件命令详解与实例 – wiki大全

I apologize, but I am repeatedly encountering an issue where the write_file tool is not recognized, preventing me from saving the article to a file. I will instead provide the article content directly in this response.

“`markdown

Curl 下载文件命令详解与实例

curl 是一个功能强大的命令行工具,用于传输数据,支持多种协议(如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等)。它在日常开发、系统管理和网络调试中都非常常用。本文将详细介绍如何使用 curl 命令下载文件,并提供丰富的实例。

1. curl 下载文件的基本用法

curl 下载文件最基本的用法是直接跟上文件的 URL。默认情况下,curl 会将下载的内容输出到标准输出(终端)。

示例 1.1: 下载文件并输出到标准输出 (不推荐用于大文件)

bash
curl https://example.com/somefile.txt

这会将 somefile.txt 的内容直接打印在你的终端上。对于二进制文件或大文件,这显然不是我们想要的结果。

2. 将文件保存到本地

要将下载的文件保存到本地,我们通常使用 -O-o 选项。

2.1 -O (大写 O): 根据 URL 自动命名文件

-O 选项告诉 curl 将文件保存到当前目录,并使用 URL 中建议的文件名。

示例 2.1: 下载文件并使用原始文件名保存

bash
curl -O https://releases.ubuntu.com/22.04/ubuntu-22.04.4-desktop-amd64.iso

此命令将下载 Ubuntu ISO 文件,并将其保存为 ubuntu-22.04.4-desktop-amd64.iso 在当前目录。

2.2 -o (小写 o): 指定保存的文件名和路径

-o 选项允许你指定下载文件的具体名称和保存路径。

示例 2.2: 下载文件并指定本地文件名

bash
curl -o my_custom_ubuntu.iso https://releases.ubuntu.com/22.04/ubuntu-22.04.4-desktop-amd64.iso

此命令将下载相同的 Ubuntu ISO 文件,但会将其保存为 my_custom_ubuntu.iso

示例 2.3: 下载文件并保存到指定目录

bash
curl -o ~/Downloads/my_custom_ubuntu.iso https://releases.ubuntu.com/22.04/ubuntu-22.04.4-desktop-amd64.iso

此命令将文件保存到 ~/Downloads/ 目录下。

3. 下载多个文件

curl 可以一次性下载多个文件,只需在命令后列出它们的 URL,并配合 -O-o 使用。

示例 3.1: 下载多个文件并使用原始文件名保存

bash
curl -O https://example.com/file1.txt -O https://example.com/file2.zip

示例 3.2: 下载多个文件并分别指定文件名

bash
curl -o local_file1.txt https://example.com/file1.txt -o local_file2.zip https://example.com/file2.zip

4. 断点续传 (Resuming Downloads)

在网络不稳定或下载大文件时,断点续传功能非常有用。curl 使用 -C (或 --continue-at) 选项来实现。

示例 4.1: 尝试从上次中断的地方继续下载

bash
curl -C - -O https://releases.ubuntu.com/22.04/ubuntu-22.04.4-desktop-amd64.iso

这里的 -C - 是一个魔术值,它告诉 curl 检查本地文件大小,并从上次中断的地方继续下载。如果文件不存在,它将从头开始下载。

5. 处理重定向 (Follow Redirects)

许多网站会使用 HTTP 3xx 重定向将你导向到资源的实际位置。默认情况下,curl 不会跟随重定向。使用 -L (或 --location) 选项可以告诉 curl 自动跟随重定向。

示例 5.1: 跟随重定向下载文件

bash
curl -L -O http://some.short.url/to/a/bigfile

6. 显示下载进度

默认情况下,curl 会显示一个进度条。如果你需要更简洁或更详细的进度信息,可以使用其他选项。

示例 6.1: 显示详细的进度条

curl 默认行为就是显示一个比较详细的进度条。
bash
curl -O https://example.com/bigfile.zip

示例 6.2: 使用简洁的进度条 (哈希标记)

bash
curl -# -O https://example.com/bigfile.zip

-# (或 --progress-bar) 会显示一个哈希标记的进度条,更简洁。

6.3: 静默下载 (不显示进度和错误)

bash
curl -s -O https://example.com/file.txt

-s (或 --silent) 会抑制所有 curl 的输出,除了错误信息。如果你想连错误信息也抑制,可以重定向标准错误。

示例 6.4: 完全静默下载 (抑制所有输出)

bash
curl -s -o /dev/null https://example.com/file.txt

或者,如果只想下载文件但不显示任何输出,可以:
bash
curl -s -o downloaded_file.txt https://example.com/file.txt

7. 认证下载 (Authentication)

如果文件位于需要认证的服务器上,你可以提供用户名和密码。

7.1 基本认证 (Basic Authentication)

示例 7.1: 使用用户名和密码进行基本认证

bash
curl -u "username:password" -O https://example.com/protected/document.pdf

如果只提供用户名,curl 会提示你输入密码。

7.2 NTLM/Kerberos 等认证方式

curl 也支持其他认证方式,例如 NTLM (--ntlm) 或 Kerberos (--negotiate -u :) 等,具体使用需查阅 curl 手册。

8. 使用代理下载

如果你在一个需要通过代理服务器访问互联网的环境中,可以使用 -x 选项。

示例 8.1: 通过 HTTP 代理下载

bash
curl -x http://proxy.example.com:8080 -O https://example.com/file.zip

示例 8.2: 通过带认证的 HTTP 代理下载

bash
curl -x http://username:[email protected]:8080 -O https://example.com/file.zip

9. 限制下载速度

有时你可能不想让 curl 占用所有带宽,可以使用 --limit-rate 选项来限制下载速度。

示例 9.1: 限制下载速度为 100KB/s

bash
curl --limit-rate 100K -O https://example.com/bigfile.iso

你可以使用 K (KB/s), M (MB/s) 来指定单位。

10. 忽略 SSL/TLS 证书验证

在某些测试或内部环境中,你可能需要下载来自使用自签名证书或无效 SSL 证书的服务器的文件。请注意,在生产环境中应尽量避免使用此选项,因为它会降低安全性。

示例 10.1: 忽略 SSL 证书验证

bash
curl -k -O https://insecure-server.com/file.zip

-k (或 --insecure) 选项会禁用 curl 对服务器 SSL 证书的验证。

11. 发送 Referer 和 User-Agent

有些网站会检查 HTTP 请求头中的 Referer (来源) 和 User-Agent (用户代理) 字段,如果缺失或不符合预期可能会拒绝下载。

示例 11.1: 设置 Referer 和 User-Agent

bash
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" \
-e "http://example.com/somepage" \
-O https://example.com/protected_download.zip

-A (或 --user-agent) 设置 User-Agent 字符串。
-e (或 --referer) 设置 Referer 字符串。

12. 总结

curl 是一个极其灵活和强大的文件下载工具,涵盖了从最简单的下载到复杂的认证、代理和速度限制等多种场景。掌握这些常用选项,将大大提高你的工作效率。在使用时,请务必根据实际需求选择合适的选项,尤其是在处理安全敏感的数据时要格外小心 SSL/TLS 验证问题。
“`

滚动至顶部