如何使用 cURL 下载文件

客户端 URL 或 cURL 是用于在系统之间传输数据的库和命令行实用程序。它支持许多协议,并且往往默认安装在许多类 Unix 操作系统上。由于它的普遍可用性,当您需要将文件下载到本地系统时,它是一个很好的选择,尤其是在服务器环境中。

在本教程中,您将使用该curl命令从 Web 服务器下载文本文件。您将查看其内容,将其保存在本地,并告诉curl在文件移动时遵循重定向。

从 Internet 下载文件可能很危险,因此请确保从信誉良好的来源下载。在本教程中,您将从 DigitalOcean 下载文件,并且不会执行您下载的任何文件。

启动互动终端!

步骤 1 — 获取远程文件

开箱即用,没有任何命令行参数,该curl命令将获取一个文件并将其内容显示到标准输出。

让我们通过robots.txt从 Digitalocean.com下载文件来试一试

  • curl https://www.digitalocean.com/robots.txt

您将看到文件内容显示在屏幕上:

Output
User-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

给出curl一个 URL,它将获取资源并显示其内容。

保存远程文件

获取文件并显示其内容是很好的,但是如果您想将文件实际保存到系统中怎么办?

要将远程文件保存到本地系统,使用与您下载的服务器相同的文件名,添加--remote-name参数,或使用-O选项:

  • curl -O https://www.digitalocean.com/robots.txt

您的文件将下载:

Output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 286 0 286 0 0 5296 0 --:--:-- --:--:-- --:--:-- 5296

不显示文件内容,而是显示curl基于文本的进度表并将文件保存为与远程文件名相同的名称。您可以使用以下cat命令检查事物

  • cat robots.txt

该文件包含您之前看到的相同内容:

Output
User-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

现在让我们看看为下载的文件指定一个文件名。

步骤 2 — 使用特定文件名保存远程文件

您可能已经有一个与远程服务器上的文件同名的本地文件。

为避免覆盖同名的本地文件,请使用-oor--output参数,后跟要将内容保存到的本地文件的名称。

执行以下命令将远程robots.txt文件下载到本地命名do-bots.txt文件:

  • curl -o do-bots.txt https://www.digitalocean.com/robots.txt

您将再次看到进度条:

Output
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 286 0 286 0 0 6975 0 --:--:-- --:--:-- --:--:-- 7150

现在使用cat命令显示内容do-bots.txt以验证它是您下载的文件:

  • cat do-bots.txt

内容是一样的:

Output
User-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

默认情况下,curl不遵循重定向,因此当文件移动时,您可能无法获得预期的结果。让我们看看如何解决这个问题。

第 3 步 – 遵循重定向

到目前为止,所有示例都包含包含https://协议的完全限定 URL 如果您碰巧尝试获取robots.txt文件并且只指定了www.digitalocean.com,您将看不到任何输出,因为 DigitalOcean 将请求重定向http://https://

您可以使用-I标志来验证这一点,该标志显示请求标头而不是文件的内容:

  • curl -I www.digitalocean.com/robots.txt

输出显示 URL 已重定向。输出的第一行告诉您它已被移动,该Location行告诉您在哪里:

Output
HTTP/1.1 301 Moved Permanently Cache-Control: max-age=3600 Cf-Ray: 65dd51678fd93ff7-YYZ Cf-Request-Id: 0a9e3134b500003ff72b9d0000000001 Connection: keep-alive Date: Fri, 11 Jun 2021 19:41:37 GMT Expires: Fri, 11 Jun 2021 20:41:37 GMT Location: https://www.digitalocean.com/robots.txt Server: cloudflare . . .

您可以使用curl手动发出另一个请求,或者您可以使用--locationor-L参数告诉curl在遇到重定向时将请求重做到新位置。试一试:

  • curl -L www.digitalocean.com/robots.txt

这次你看到了输出,如下curl重定向:

Output
User-agent: * Disallow: sitemap: https://www.digitalocean.com/sitemap.xml sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

您可以将该-L参数与上述一些参数结合使用,以将文件下载到本地系统:

  • curl -L -o do-bots.txt www.digitalocean.com/robots.txt

警告:许多在线资源会要求您使用curl下载脚本并执行它们。在运行已下载的任何脚本之前,最好先检查它们的内容,然后再使它们可执行并运行它们。使用该less命令检查代码以确保它是您要运行的内容。

结论

curl让您可以从远程系统快速下载文件。curl支持许多不同的协议,还可以发出更复杂的 Web 请求,包括与远程 API 交互以发送和接收数据。

您可以curl通过运行来查看手册页以了解更多信息man curl

觉得文章有用?

点个广告表达一下你的爱意吧 !😁