如何使用 cURL 下载文件

客户端URL,或cURL,是一个图书馆和命令行工具,用于在系统之间传输数据. 它支持许多协议,并倾向于在许多类似Unix的操作系统上默认安装。

在本教程中,您将使用弯曲命令从 Web 服务器下载文本文件. 您将查看其内容,本地保存它,并告诉弯曲,如果文件已移动,请遵循重定向。

从互联网上下载文件可能是危险的,所以要确保你是从可靠的来源下载的. 在本教程中,你将从DigitalOcean下载文件,你不会执行任何你下载的文件。

步骤 1 - 删除远程文件

从框中,没有任何命令行参数,弯曲命令将收集文件并将其内容显示到标准输出中。

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

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

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

1[secondary_label Output]
2User-agent: *
3Disallow:
4
5sitemap: https://www.digitalocean.com/sitemap.xml
6sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
7sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
8sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

弯曲一个URL,它将收集资源并显示其内容。

保存远程文件

检索一个文件并显示其内容都是好的,但如果你想实际上将该文件保存到你的系统怎么办?

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

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

你的檔案會下載:

1[secondary_label Output]
2  % Total    % Received % Xferd Average Speed Time Time Time Current
3                                 Dload Upload Total Spent Left Speed
4100 286 0 286 0 0 5296 0 --:--:-- --:--:-- --:--:--  5296

而不是显示文件的内容,‘curl’显示一个基于文本的进度计,并将该文件保存到与远程文件的名称相同的名称。

1cat robots.txt

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

1[secondary_label Output]
2User-agent: *
3Disallow:
4
5sitemap: https://www.digitalocean.com/sitemap.xml
6sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
7sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
8sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

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

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

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

若要避免重写相同名称的本地文件,请使用-o--output参数,然后是您想要保存内容的本地文件的名称。

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

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

再一次,你会看到进度栏:

1[secondary_label Output]
2  % Total    % Received % Xferd Average Speed Time Time Time Current
3                                 Dload Upload Total Spent Left Speed
4100 286 0 286 0 0 6975 0 --:--:-- --:--:-- --:--:--  7150

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

1cat do-bots.txt

内容相同:

1[secondary_label Output]
2User-agent: *
3Disallow:
4
5sitemap: https://www.digitalocean.com/sitemap.xml
6sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
7sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
8sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

默认情况下,‘curl’不遵循重定向,所以当文件移动时,您可能无法获得您期望的内容。

步骤 3 – 遵循重定向

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

您可以通过使用-I标志来验证此情况,该标志显示了请求标题,而不是文件的内容:

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

输出显示 URL 被重定向,输出的第一个行告诉你它被移动,而位置行告诉你:

 1[secondary_label Output]
 2HTTP/1.1 301 Moved Permanently
 3Cache-Control: max-age=3600
 4Cf-Ray: 65dd51678fd93ff7-YYZ
 5Cf-Request-Id: 0a9e3134b500003ff72b9d0000000001
 6Connection: keep-alive
 7Date: Fri, 11 Jun 2021 19:41:37 GMT
 8Expires: Fri, 11 Jun 2021 20:41:37 GMT
 9Location: https://www.digitalocean.com/robots.txt
10Server: cloudflare
11. . .

您可以使用curl手动创建另一个请求,或者您可以使用--位置-L参数,该参数表示curl,每次遇到重定向时,可以将请求重定向到新位置。

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

这一次你会看到输出,因为‘curl’跟随了重定向:

1[secondary_label Output]
2User-agent: *
3Disallow:
4
5sitemap: https://www.digitalocean.com/sitemap.xml
6sitemap: https://www.digitalocean.com/community/main_sitemap.xml.gz
7sitemap: https://www.digitalocean.com/community/questions_sitemap.xml.gz
8sitemap: https://www.digitalocean.com/community/users_sitemap.xml.gz

您可以将 -L 参数与上述几个参数相结合,将文件下载到本地系统:

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

<$>[警告] 警告:许多在线资源会要求您使用‘curl’来下载脚本并执行它们。在运行您下载的任何脚本之前,最好在使其可执行并运行之前检查其内容。

结论

curl支持许多不同的协议,还可以执行更复杂的 Web 请求,包括与远程 API 进行交互以发送和接收数据。

您可以通过运行man curl来查看curl的手册页面来了解更多。

Published At
Categories with 技术
comments powered by Disqus