使用 cURL 下载文件既简单又直接,并且你可以使用多种配置选项。在下面的指南中,我将向你展示如何使用 cURL 命令行工具下载文件。
当涉及到从客户端向服务器传输数据(或从服务器传输数据)时,cURL 工具非常受欢迎。你可以用它从互联网下载文件。值得注意的是,文件下载系统相当复杂和先进,使你能够比使用常规下载工具实现更多功能。
作为一个 bash shell 脚本编写者,你会发现 cURL 非常适合自动化文件下载。在本文中,我将指导你如何下载文件,以及如何使用所有命令和标志来定制工具以满足你的特定下载需求。
文件下载的基本语法
以下是使用 cURL 下载文件的一些基本语法。在下一节中,你将看到多文件下载、速率限制、使用代理等情况下的更多语法。
curl [URL] — fetch and print to console
curl -O [URL] — download file with its original name
curl [URL] -o [NEWFILENAME] — Download and rename file name.
本指南中使用的文件可在https://filesamples.com/samples/document/txt/sample3.txt上找到。我将从基础开始,以便你从头开始掌握知识。首先,让我们看看如何访问此文件并在控制台上打印其内容。
curl https://filesamples.com/samples/document/txt/sample3.txt

如你所见,“curl URL”命令将在屏幕上打印文件内容。这意味着我们已经能够下载它,只是我们将其打印在屏幕上。
接下来保存,不定义文件的名称。
curl -O https://filesamples.com/samples/document/txt/sample3.txt
上述命令将在你所在的目录中保存名为sample3.txt的文件。大写字母的“-O”指示该工具保存文件而不是将其打印在屏幕上。
这已经很好了。但在大多数情况下,我们宁愿用新名称而不是原始名称来保存文件。下面是更改下载文件文件名的代码——你所要做的就是使用小写字母“-o”标志后跟文件名。o 是 output 的小写形式,你可以使用“—output”代替“-o”。
curl https://filesamples.com/samples/document/txt/sample3.txt —output loremipsu.txt curl https://filesamples.com/samples/document/txt/sample3.txt -o loremipsu.txt
使用 cURL 下载多个文件
在上面的例子中,你将看到只下载了一个文件。如果你需要下载多个文件,有几种方法可以轻松完成。首先,如果存在可识别的模式,则只需使用一个简短的命令即可,这会使事情变得更容易。如果没有模式,则需要列出完整的 URL。让我们看看它是如何工作的。
下载带有模式的多个文件
在同一页面上,我得到了https://filesamples.com/samples/document/txt/sample3.txt URL,还有另外 2 个https://filesamples.com/samples/document/txt/sample2.txt和https://filesamples.com/samples/document/txt/sample1.txt。
如果你查看这 3 个 URL,你会发现它们之间的唯一区别是文件的名称,分别是 sample3.txt、sample2.txt 和 sample1.txt — 并且只有图片不同,其他都相同。让我们看看如何仅使用一个命令来下载这些文件。
curl -O https://filesamples.com/samples/document/txt/sample[1-3].txt
如你所见,[1-3] 告诉 cURL 该 URL 是一个模板,它应该循环遍历 1 – 3 的范围并将其添加到下载文件。请记住,此处的 -O 标志告诉它将文件名与原始文件名一起保存。让我们看看可以完成上述操作的另一种方法。
curl -O https://filesamples.com/samples/document/txt/{sample1.txt, sample2.txt, sample3.txt}
上述命令将实现与第一个命令相同的结果。
不带模式下载多个文件
上面的命令非常简单。但是,如果你必须处理多个 URL 的下载,而这些 URL 没有可以利用的模式来缩短命令,那么你必须列出每个文件的完整 URL,并添加所需的特定输出标签。让我们看看如何下载上面的 3 个 TXT 文件,假设它们没有共同的模式。
curl -O https://filesamples.com/samples/document/txt/sample1.txt -O https://filesamples.com/samples/document/txt/sample2.txt -O https://filesamples.com/samples/document/txt/sample3.txt
遵循 HTTP 重定向
如果你输入正确的 URL 并且不需要重定向,则文件应该会保存。但是,如果有临时或永久重定向,则你将无法获取文件。你将收到一条消息,告知你 URL 已被移动,而不是你要下载的文件的内容。以下是使用其中一个 URL 的响应示例,但将其改为 http:// 而不是 https://。

如果你希望 cURL 遵循重定向并在重定向时下载文件,那么你应该添加“-L”标志,如下所示
curl -O http://filesamples.com/samples/document/txt/sample1.txt -L
通过上述操作,该工具将按照重定向并成功为你下载所需的文件。
阻止进度报告(静默模式)
默认情况下,当你运行上述任何命令时,你将看到如下所示的进度报告。

在这里,你可以看到下载速度和所用时间等。这不是 UNIX 的做事方式,因为在大多数情况下,除非必要,工具应该尽可能保持安静。如果你不想将其发送到标准输出(在本例中为控制台),你可以按如下方式创建“-S”或“—silent”命令。
curl -O http://filesamples.com/samples/document/txt/sample1.txt -s
通过上述操作,控制台上将不会打印任何内容。
通过代理下载文件
有时,你可能想不使用真实 IP 地址来下载文件。在这种情况下,代理是你的最佳选择。有趣的是,使用 -x 标志在 cURL 中配置代理非常简单。让我们看看如何使用 cURL 通过代理访问 Web 资源。基本语法如下。
curl -x http://[HOST]:[PORT] -O [URL]
让我们使用第一个例子。
curl -x http://127.84.112.43:555 -O https://filesamples.com/samples/document/txt/sample3.txt
以上是基本语法。如上所示,仅包含代理主机和端口。这仅适用于免费代理或使用 IP 白名单进行身份验证的代理。如果你的代理需要用户名和密码身份验证,请使用以下代码语法。
curl -x http://username:password@[HOST]:[PORT] -O [URL]
下面是一个例子
curl -x http://sharpman: [email protected] :555 -O https://filesamples.com/samples/document/txt/sample3.txt
速率限制
cURL 将以最快的速度访问目标服务器的资源,有时,这可能会使服务器不堪重负,导致阻塞。如果你需要为此限制速度,或者想要模拟较慢的网络,则可以使用 —limit-rate 标志以千字节、兆字节和千兆字节为单位定义限制。以下是如何将下载限制保持在 500KB 的示例。
curl —limit-rate 500KB -O https://filesamples.com/samples/document/txt/sample3.txt
查看下载进度
默认下载报告只会告诉你下载速度、文件大小和所用时间。我已经讨论过如何禁用它。如果你正在处理大文件,这将毫无用处。更有帮助的是进度指示器,它会告诉你完成下载的百分比。你可以使用 -# 标志,如下所示。
curl -# -O https://filesamples.com/samples/document/txt/sample3.txt
上面的文件相当小。如果你使用较大的文件,你将看到下载进度,如下所示。
#### 10.86%
使用 cURL 配置文件
上述命令都有效。但是,还有另一种方法可以简化文件下载。即创建一个配置文件并将所有常用确认信息存储在其中。这样,你不必在每次需要发送下载请求时都编写繁琐的命令。例如,你不必在每个下载请求中定义速率限制、超时期限、代理设置和遵循重定向,而是可以将其保存为配置并默认使用它们。
为此,创建一个文本文件并保存以下代码
curl_timeout = 10 curl_limit_rate = 500000 curl_follow_location = true proxy = https://yourproxy.com:3128 # Username and password for proxy authentication proxy_user = username proxy_password = password
将其保存为主目录中的 .curlrc。要使用它,你只需发送一个简单的请求,如下所示。
curl https://filesamples.com/samples/document/txt/sample3.txt -O
cURL 将查看主目录中的配置文件并获取这些配置以供默认使用。这是使用 cURL 的一种更简洁的方式,即始终指定每个标志。
结论
从上面可以看出,cURL 是一个很好的下载器,并且通过一些调整,你应该能够编写一个强大的 shell 脚本或其他类型的脚本,以你想要的方式自动下载文件。
从使用代理到设置速率限制、请求超时和报告下载进度,cURL 工具与常规下载工具一样强大。你最好查看 cURL 文档,以充分了解该工具在下载资源方面的真正功能。

