如何使用 cURL 下载文件

Client URL 或 cURL 是用于在系统之间传输数据的命令行实用程序。它支持许多协议,并且默认被安装在许多类 Unix 操作系统上。在服务器环境中,如果需要将文件下载到本地系统时,使用cURL可以很容易做到。

如何使用 cURL 下载文件
如何使用 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-hosting/%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8-curl-%e4%b8%8b%e8%bd%bd%e6%96%87%e4%bb%b6/

发表评论

登录后才能评论