简介
如果你正在寻找快速答案,那么 curl -O
命令可让你使用 curl 命令行实用程序下载文件。当然,关于使用 curl 下载文件,除了 -O
参数之外,还有很多东西需要学习。
我们将展示如何使用 curl 在 Linux 上下载文件,并提供多个 curl 下载命令的示例,你可以使用这些命令来满足不同的要求。如果你不熟悉 curl,我们建议你通读本文。如果你熟悉 curl 但只需要快速回顾一下,请随意跳转到特定部分。
什么是 curl?
curl 是一个 开源 命令行实用程序,用于使用 URL 语法和各种网络协议(包括 HTTP(S)、FTP、SFTP、LDAP(S) 和 SMTP)传输数据。curl 命令行实用程序是 cURL(“URL 客户端”)项目的一部分,该项目包括 libcurl 库。
由于 curl 通常“只是工作”,具有高度可移植性并在许多系统上默认安装,并且在 API 文档中某种程度上是事实上的标准,因此它是开发人员和 DevOps 工程师中流行的工具。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 输入
ssh root@你的服务器IP
例如ssh root@154.9.227.239
回车后,首次需要输入yes
,再次回车后即可登录服务器。
- 到此为止,我们的云服务器就远程连接上了。
先决条件
如果你在可升级的笔记本电脑上运行现代 Linux 操作系统,你可能拥有所需的一切来遵循本文。为了确保这一点,以下是先决条件:
- curl - curl 默认安装在大多数流行的 *nix 操作系统(包括 macOS)上。它也 可在现代 Windows 操作系统上使用。你可以通过从终端运行
curl -V
命令来检查是否安装了 curl。输出应类似于:
如果你是 Linux 用户并且未安装 curl,你可能可以使用操作系统的默认软件包管理器(例如 apt、yum 或 zypper)下载它。此处提供了各种其他操作系统的 curl 下载链接。
- 连接到服务器以下载文件 - 我们将在大多数示例命令中使用 HTTPS 连接,并且我们也建议你这样做。但是,curl 支持二十多种协议。只要你可以访问支持 curl 至少一种协议的服务器以下载文件,你就可以按照示例命令进行操作。请务必将我们的示例链接(例如 http://speedtest.lt.cherryservers.com/test-100mb)替换为你想要下载的文件的链接。
专业提示: 你可以组合 curl 参数。在大多数示例中,我们将坚持在 curl 命令中使用一个或两个参数。但是,curl 也支持组合参数。例如,如果你想下载文件 (-O)、遵循 301 重定向 (-L) 并允许不安全的 SSL 证书 (-k),你可以使用 curl -OLk。
如何使用 curl 下载文件
第 1 步:使用 curl 下载文件
使用 curl 下载文件的基本语法是:
curl -O <协议>://<站点>/<文件路径>
例如,要使用 HTTPS 从 http://speedtest.lt.cherryservers.com/test-1000mb 下载 1GB 的虚拟数据,请使用此命令:
curl -O http://speedtest.lt.cherryservers.com/test-100mb
输出(称为 curl 进度指示器)类似于以下内容:
默认情况下,你下载的文件保存在你当前的工作目录中。下面是一个端到端的可视示例。
第 2 步:curl 下载到哪里以及如何使用其他名称保存文件
curl -O
命令使用远程服务器的文件名将文件保存在你当前工作目录中的本地。你可以使用 curl -o
指定不同的本地文件名和下载位置。基本语法是:
curl -o </保存路径/文件名> <协议>://<站点>/<文件路径>
要将 http://speedtest.lt.cherryservers.com/test-1000mb 保存到本地 /tmp 目录中,并将其命名为 mydownload.zip,请使用以下命令:
curl -o /tmp/mydownload.zip http://speedtest.lt.cherryservers.com/test-1000mb
第 3 步:指定非默认端口
默认情况下,curl 使用协议的默认端口(HTTP 为 80,HTTPS 为 443,FTP 为 21 等)。要指定非默认端口,请将 :[端口号]
附加到远程服务器的域名或 IP 地址的末尾。
基本语法是:
curl -O <协议>://<站点>:[端口号]/<文件路径>
使用我们的 http://speedtest.lt.cherryservers.com/test-1000mb 示例,如果 HTTP 服务器在端口 4040 上运行,你将使用以下命令:
curl -O http://speedtest.lt.cherryservers.com:4040/test-1000mb
如何使用多个 curl 下载命令处理多个条件
Curl 命令是在 Linux 操作系统上下载和传输文件的绝佳工具。以下是一些方法和示例,说明如何使用多个 curl 下载命令来下载多个文件、重新启动中断的下载、并行下载文件等。
第 1 步:重新启动中断的下载
在某些情况下,例如当你通过较差的网络连接下载大文件时,文件下载会被中断。-C - 选项允许你恢复中断的下载。基本语法是:
curl -C - -o <本地文件名> <协议>://<站点>/<文件路径>
例如,要恢复 example.zip 的 HTTPS 下载(当本地下载为 /tmp/mydownload.zip 时),请使用以下命令:
curl -C - -o /tmp/mydownload.zip http://speedtest.lt.cherryservers.com/test-1000mb
在显示 curl 进度指示器之前,输出将包含类似于以下的文本:
第 2 步:使用一个命令下载多个文件
你可以在一个 curl 命令中指定多个 URL,以便在一个命令中下载多个文件。
基本语法是:
curl -O <协议>://<站点 1>/<文件 1 的路径> -O <协议>://<站点 2>/<文件 2 的路径>
例如,要下载 http://speedtest.lt.cherryservers.com/test-1000mb 和 http://speedtest.lt.cherryservers.com/test-100mb,请使用以下命令:
curl -O http://speedtest.lt.cherryservers.com/test-1000mb -O http://speedtest.lt.cherryservers.com/test-100mb
curl 进度指示器将显示每个下载的统计信息。对于两个 URL,输出将类似于以下内容:
如果你有很长的 URL 列表,你可以将它们添加到文本文件中,然后使用 xargs
将它们传递给 curl。为了演示,假设我们有一个 curlsites.txt
文件,其中包含我们的 URL,并将每个 URL 放在新行上:
http://speedtest.lt.cherryservers.com/test-1000mb
http://speedtest.lt.cherryservers.com/test-100mb
我们现在可以使用 xargs
命令以及 curl
和我们的 curlsites.txt
文件作为输入来下载每个文件:
xargs -n 1 curl -O < curlsites.txt
第 3 步:并行下载多个文件
通常,curl 会逐个处理 URL,上面的 xargs 示例也是如此。但是,你可以将 -P
参数添加到 xargs 中以并行下载多个文件。例如,此命令将并行运行两个 curl 下载。
xargs -P 2 -n 1 curl -O < curlsites.txt
有关 xargs 及其选项的更多详细信息,请查看 xargs 手册页。
第 4 步:将速率限制应用于 curl 下载请求
速率限制允许你指定 curl 请求的最大传输速率。将速率限制应用于 curl 下载请求的基本语法是:
curl --limit-rate <速度> -O <协议>://<站点>/<文件路径>
默认情况下,<速度>
以字节/秒为单位进行度量。你可以附加以下后缀之一来更改计量单位:
K
或k
= 千字节M
或m
= 兆字节G
或g
= 千兆字节
例如,要在我们的示例下载中设置每秒 1000 字节的速率限制,我们可以使用以下命令:
curl --limit-rate 1000 -O http://speedtest.lt.cherryservers.com/test-100mb
或此命令:
curl --limit-rate 1k -O http://speedtest.lt.cherryservers.com/test-100mb
要限制为每秒 100 兆字节:
curl --limit-rate 100m -O http://speedtest.lt.cherryservers.com/test-100mb
请注意,curl 会尝试平均传输速度,使其不超过 <速度>
值。当你首次使用 --limit-rate
选项运行 curl 时,你可能会看到速度大于指定的 <速度>
,但它们应会很快趋于平稳。
第 5 步:自动中止慢速下载
如果你下载文件的服务器太慢,你可能希望自动中止连接。你可以使用 -Y
(或 --speed-limit
)和 -y
(或 --speed-time
)选项。
Y
(或-speed-limit
)选项定义速度(以字节/秒为单位)。y
(或-speed-time
)选项指定时间量(以秒为单位)。如果下载速度在y
定义的时间量内小于Y
定义的速度,则 curl 将中止下载。如果未指定y
,则 30 秒是Y
的默认时间。以下是三个示例进行演示。- 如果速度在 10 秒内小于 ~100 KB/秒(千字节/秒),则中止下载:
curl -O -Y 100000 -y 10 http://speedtest.lt.cherryservers.com/test-1000mb
- 如果速度在 15 秒内小于 ~100 MB/秒(兆字节/秒),则中止下载:
curl -O -Y 100000000 -y 15 http://speedtest.lt.cherryservers.com/test-1000mb
- 如果速度在 30 秒内小于 1KB/秒,则中止下载(30 秒是默认值,因此无需指定 -y):
curl -O -Y 1000 http://speedtest.lt.cherryservers.com/test-1000mb
如果 curl 由于速度传输限制而中止下载,它将打印类似于以下的错误消息:
第 6 步:显示下载状态栏
你可以使用 --progress-bar
参数使 curl 显示进度条,而不是标准进度条。进度条将以百分比形式并使用终端上的 # 符号显示下载进度。
你可以将 --progress-bar
参数附加到大多数 curl 命令。以下是具有 --progress-bar
参数的基本 HTTPS 下载命令语法:
curl -O <协议>://<站点>/<文件路径> --progress-bar
进度条输出将类似于:
第 7 步:使 curl 遵循重定向
从 HTTP(S) 服务器下载文件时,301 重定向很常见。要使 curl 遵循 301 重定向,请使用 -L 参数。
使用 -L 参数遵循 301 重定向的基本语法示例是:
curl -OL <协议>://<站点>/<文件路径>
curl -L -o </保存路径/文件名> <协议>://<站点>/<文件路径>
第 8 步:使用基本身份验证
虽然诸如 OAuth 2.0 等现代形式的身份验证在现代 HTTP 服务器上更为常见,但在某些情况下,下载可能受使用基本身份验证的保护,这需要用户名和密码。例如,FTP 下载是基本身份验证的典型用例。你可以使用 -u
参数为基本身份验证提供用户名和密码。
curl 下载请求上的基本身份验证的基本语法是:
curl -u <用户名>:<密码> -O <协议>://<站点>/<文件路径>
第 9 步:禁止 curl 输出
你可以使用 -s
参数禁止 curl 的输出。使用 curl 静默下载文件的基本语法是:
curl -Os <协议>://<站点>/<文件路径>
此命令像 -O 一样下载文件,但不会将进度或统计信息打印到标准输出。
第 10 步:允许不安全的 SSL/TLS 证书
在某些情况下,你可能希望通过 HTTPS 下载文件,即使服务器具有无效或自签名证书。你可以使用 -k 选项使 curl 继续运行而不验证 TLS/SSL 证书。请注意,此行为并不安全!
以下是允许 curl 下载不安全的 SSL 证书的基本语法:
curl -Ok https://<站点>/<文件路径>
如果你有意连接到具有不安全 TLS/SSL 证书的站点,则 -k 参数可以帮助解决诸如此类的错误:
我们还建议访问 错误消息中提到的官方页面,以获取有关 curl 和 TLS/SSL 的更多详细信息。
第 11 步:使用 FTP 和 SFTP 下载文件
除了 HTTP(S) 之外,FTP 和 SFTP 也是 curl 可用于下载文件的流行协议。你可以像在其他示例中使用 HTTPS 一样,通过在命令中指定这些协议来使用 FTP 或 SFTP。
由于 FTP 和 SFTP 服务器通常需要用户名和密码,我们将在示例中使用 -u 参数。
使用 curl 进行 FTP 下载的基本语法:
curl -u <用户名>:<密码> -O ftp://<站点>/<文件路径>
对于 SFTP:
curl -u <用户名>:<密码> -O sftp://<站点>/<文件路径>
使用 Curl 的后续步骤
现在你了解了在 Linux 操作系统上使用 curl 下载文件的常用方法,你可以继续进行更高级的案例。我们建议参考 官方 curl 文档 和 免费的 Everything curl 书籍,以获取有关特定用例的详细信息。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site
rl 下载文件的常用方法,你可以继续进行更高级的案例。我们建议参考 官方 curl 文档 和 免费的 Everything curl 书籍,以获取有关特定用例的详细信息。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site