Client URL 或 cURL 是用于在系统之间传输数据的命令行实用程序。它支持许多协议,并且默认被安装在许多类 Unix 操作系统上。在服务器环境中,如果需要将文件下载到本地系统时,使用cURL可以很容易做到。
在本教程中,我们将使用该 curl
命令从 Web 服务器下载文本文件。
步骤 1 — 获取远程文件
直接使用,不加任何命令行参数,该 curl
命令将获取一个文件,并将其内容显示出来。
让我们通过从 baidu.com下载 robots.txt
文件来试一试:
curl https://www.baidu.com/robots.txt
我们会看到看到 robots.txt 文件的内容显示在屏幕上:
Output
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
...
curl
加一个 URL,它将获取 URL 对应资源并显示其内容。
保存远程文件
上述命令只是获取文件并显示其内容,但是如果我们想将文件保存到本地应该怎么办呢?
要将远程文件保存到本地,可以添加--remote-name
参数或使用-O
选项:
curl -O https://www.baidu.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: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
...
现在来看看如何为下载的文件指定一个文件名。
步骤 2 — 使用特定文件名保存远程文件
我们可能已经有一个与远程服务器上的文件同名的本地文件。为避免覆盖同名的本地文件,可以使用-o
或者--output
参数,后跟想要设定的文件名称。
执行以下命令将远程 robots.txt
文件下载到本地,并重新命名为 do-bots.txt
文件:
curl -o do-bots.txt https://www.baidu.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: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
...
默认情况下,curl
不能应用于重定向ULR,让我们看看如何解决这个问题。
第 3 步 – 追踪重定向
到目前为止,所有示例都使用 https://
协议的 URL 。如果我们尝试获取 www.baidu.com
域名下的 robots.txt 文件,将看不到任何内容输出,因为 baidu 将 http://
请求重定向到 https://
协议:
可以使用 -I
选项来显示请求标头来验证这一点:
curl -I www.baidu.com/robots.txt
输出显示 URL 已重定向。输出的第一行告诉我们它已被 301 重定向,在 Location
行将告诉我们重定向到了那个URL:
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.baidu.com/robots.txt
Server: cloudflare
. . .
我们可以使用 curl
从最终URL获取文件,或者可以使用--location
或者 -L
参数告诉 curl
在遇到重定向时,从最终的URL地址获取文件:
curl -L www.baidu.com/robots.txt
这次我们看到了如下输出:
Output
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
...
我们可以将 -L
参数与上述的其他参数结合使用,以将文件下载到本地系统:
curl -L -o do-bots.txt www.baidu.com/robots.txt
结论
使用 curl
可以从远程服务器快速下载文件。curl
支持许多不同的协议,还可以发出更复杂的 Web 请求,包括与远程 API 交互以发送和接收数据。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/vps/how-to-use-curl-download-files/