客户端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
的手册页面来了解更多。