15 个实用的 Linux cURL 命令示例(cURL 下载示例)

举报
Tiamo_T 发表于 2021/11/17 21:30:05 2021/11/17
【摘要】 cURL 是一个软件包,由命令行工具和使用 URL 语法传输数据的库组成。 cURL 支持各种协议,如 DICT、FILE、FTP、FTPS、Gopher、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、Telnet 和 TFTP。

cURL 是一个软件包,由命令行工具和使用 URL 语法传输数据的库组成。

cURL 支持各种协议,如 DICT、FILE、FTP、FTPS、Gopher、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、Telnet 和 TFTP。

本文提供了 15 个实用的 cURL 使用示例。

1. 下载单个文件

以下命令将获取 URL 的内容并将其显示在 STDOUT 中(即在您的终端上)。

$ curl http://www.centos.org

要将输出存储在文件中,您可以将其重定向,如下所示。这还将显示一些额外的下载统计信息。

$ curl http://www.centos.org > centos-org.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 27329    0 27329    0     0   104k      0 --:--:-- --:--:-- --:--:--  167k

2. 将 cURL 输出保存到文件

我们可以使用 -o/-O 选项将 curl 命令的结果保存到文件中。

  • -o(小写 o)结果将保存在命令行中提供的文件名中
  • -O(大写O)URL中的文件名将被用作存储结果的文件名
$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

现在页面 gettext.html 将保存在名为“mygettext.html”的文件中。您还可以注意到,当使用 -o 选项运行 curl 时,它会显示下载进度表,如下所示。


 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 66 1215k   66  805k    0     0  33060      0  0:00:37  0:00:24  0:00:13 45900
100 1215k  100 1215k    0     0  39474      0  0:00:31  0:00:31 --:--:-- 68987

当您使用 curl -O(大写 O)时,它会将内容保存在本地机器中名为“gettext.html”的文件中。

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html

注意:当 curl 必须将数据写入终端时,它会禁用进度表,以避免打印混乱。我们可以使用 '>'|'-o'|'-O' 选项将结果移动到文件中。

3. 一次获取多个文件

我们可以通过在命令行上指定 URL 来一次性下载多个文件。
句法:

$ curl -O URL1 -O URL2

下面的命令将下载 index.html 和 gettext.html 并将其保存在当前目录下的相同名称中。

$ curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html

请注意,当我们从同一个服务器下载多个文件时,如上图所示,curl 会尝试重新使用连接。

4. 使用 -L 选项跟随 HTTP 位置标头

默认情况下,CURL 不遵循 HTTP 位置标头。它也被称为重定向。当请求的网页移动到另一个地方时,HTTP 位置标头将作为响应发送,它将包含实际网页所在的位置。

例如,当有人在印度的浏览器中输入 google.com 时,它会自动重定向到“google.co.in”。这是基于 HTTP 位置标头完成的,如下所示。

$ curl http://www.google.com

<TITLE>302 Moved</TITLE>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.in/">here</A>

上面的输出表明请求的文档已移至“http://www.google.co.in/”。

我们可以使用 -L 选项坚持 curl 跟随重定向,如下所示。现在它将下载 google.co.in 的 html 源代码。

$ curl -L http://www.google.com

5. 继续/恢复以前的下载

使用 curl -C 选项,您可以继续下载由于某种原因已经停止的下载。当您下载大文件并且下载中断时,这将很有帮助。

如果我们说“-C -”,那么 curl 会找到从哪里开始恢复下载。我们也可以给出一个偏移量'-C <offset>'。将从源文件的开头跳过给定的偏移字节。

使用 curl 开始大下载,然后按 Ctrl-C 停止下载。

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
############## 20.1%

注意:-# 用于显示进度条而不是进度表。

现在上述下载停止在 20.1%。使用“curl -C -”,我们可以从之前停止的地方继续下载。现在下载量从 20.1% 开始。

curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
############### 21.1%

6. 限制数据传输速率

您可以使用 –limit-rate 选项限制数据传输的数量。您可以指定最大传输速率作为参数。

$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

上述命令将数据传输限制为 1000 字节/秒。curl 可能会在短时间内使用更高的传输速率。但平均而言,它会达到 1000B/秒。

以下是上述命令的进度表。可以看到当前速度接近1000 Bytes。

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  1 1215k    1 13601    0     0    957      0  0:21:40  0:00:14  0:21:26   999
  1 1215k    1 14601    0     0    960      0  0:21:36  0:00:15  0:21:21   999
  1 1215k    1 15601    0     0    962      0  0:21:34  0:00:16  0:21:18   999

7.只有在给定时间之前/之后修改的文件才下载

我们可以使用 curl 中的 -z 选项获取特定时间后修改的文件。这将适用于 FTP 和 HTTP。

$ curl -z 21-Dec-11 http://www.example.com/yy.html

上面的命令将下载 yy.html 只有当它被修改晚于给定的日期和时间

$ curl -z -21-Dec-11 http://www.example.com/yy.html

如果在给定的日期和时间之前修改了 yy.html,则上面的命令将下载 yy.html。

有关日期表达式支持的各种语法,请参阅“man curl_getdate”

8. 在 cURL 中通过 HTTP 身份验证

有时,网站需要用户名和密码才能查看内容(可以使用 .htaccess 文件完成)。在 -u 选项的帮助下,我们可以将这些凭据从 cURL 传递到 Web 服务器,如下所示。

$ curl -u username:password URL

注意:默认情况下 curl 使用基本 HTTP 身份验证。我们可以使用 -ntlm | 指定其他身份验证方法。-消化。

9. 从 FTP 服务器下载文件

cURL 也可用于从 FTP 服务器下载文件。如果给定的 FTP 路径是一个目录,默认情况下它会列出特定目录下的文件。

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

上述命令将从ftp服务器下载xss.php文件并保存在本地目录中。

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

这里,给定的 URL 指的是一个目录。所以 cURL 会列出给定 URL 下的所有文件和目录

10. 使用范围列出/下载

cURL 支持在 URL 中给出的范围。当给定范围时,将下载在范围内匹配的文件。从 FTP 镜像站点下载包会很有帮助。

$ curl ftp://ftp.uk.debian.org/debian/pool/main/[az]/

上面的命令将在终端中列出 az 范围中的所有包。

11.上传文件到FTP服务器

Curl 也可用于通过 -T 选项将文件上传到 FTP 服务器。

$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

上述命令会将名为 myfile.txt 的文件上传到 FTP 服务器。您还可以使用范围操作同时上传多个文件。

$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com

我们可以选择使用“.” 从 STDIN 获取输入并传输到远程。

$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

上面的命令将从标准输入中获取用户的输入,并将内容保存在 ftp 服务器中,名称为“myfile_1.txt”。

您可以为每个 URL 提供一个“-T”,这对指定要上传的内容。

12. 使用 Verbose 和 Trace 选项的更多信息

您可以使用 -v 选项了解正在发生的事情。-v 选项启用详细模式,它将打印详细信息

curl -v http://google.co.in

about 命令将输出以下内容

* About to connect() to www.google.com.in port 80 (#0)
*   Trying 74.125.236.56... connected
* Connected to www.google.co.in (74.125.236.56) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.21.0 (i486-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
> Host: www.google.co.in
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Tue, 10 Apr 2012 11:18:39 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< Set-Cookie: PREF=ID=7c497a6b15cc092d:FF=0:TM=1334056719:LM=1334056719:S=UORpBwxFmTRkbXLj; expires=Thu, 10-Apr-2014 11:18:39 GMT; path=/; domain=.google.co.in
.
.

如果您需要更详细的信息,则可以使用 –trace 选项。跟踪选项将启用所有传入/传出数据到给定文件的完整跟踪转储

=> Send header, 169 bytes (0xa9)
0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1..
0010: 55 73 65 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c User-Agent: curl
..
0060: 2e 32 2e 33 2e 34 20 6c 69 62 69 64 6e 2f 31 2e .2.3.4 libidn/1.
0070: 31 35 20 6c 69 62 73 73 68 32 2f 31 2e 32 2e 36 15 libssh2/1.2.6
0080: 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 67 6f 6f 67 ..Host: www.goog
0090: 6c 65 2e 63 6f 2e 69 6e 0d 0a 41 63 63 65 70 74 le.co.in..Accept
00a0: 3a 20 2a 2f 2a 0d 0a 0d 0a                      : */*....
== Info: HTTP 1.0, assume close after body
<= Recv header, 17 bytes (0x11)
0000: 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0d HTTP/1.0 200 OK.
0010: 0a

当 curl 由于某种原因失败而我们不知道为什么时,这个详细和跟踪选项会派上用场。

13. 使用 DICT 协议获取单词的定义

您可以在 DICT 协议的帮助下使用 cURL 获取单词的定义。我们需要将字典服务器 URL 传递给它。

$ curl dict://dict.org/d:bash

上面的命令将列出bash的含义如下

151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48"
Bash \Bash\, v. t. [imp. & p. p. {Bashed}; p. pr. & vb. n.
   {Bashing}.] [Perh. of imitative origin; or cf. Dan. baske to
   strike, bask a blow, Sw. basa to beat, bas a beating.]
   To strike heavily; to beat; to crush. [Prov. Eng. & Scot.]
   --Hall Caine.
   [1913 Webster]

         Bash her open with a rock.               --Kipling.
   [Webster 1913 Suppl.]
.
151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48"
Bash \Bash\, n.
   1. a forceful blow, especially one that does damage to its
      target.
      [PJC]
.
.

现在你可以看到它使用了“The Collaborative International Dictionary of English”。有很多词典可用。我们可以使用列出所有字典

$ curl dict://dict.org/show:db

jargon "The Jargon File (version 4.4.7, 29 Dec 2019)"
foldoc "The Free On-line Dictionary of Computing (26 July 2019)"
easton "Easton's 1897 Bible Dictionary"
hitchcock "Hitchcock's Bible Names Dictionary (late 1800's)"
bouvier "Bouvier's Law Dictionary, Revised 6th Ed (1856)"

现在为了在计算机中找到Bash的实际含义我们可以在“foldoc”字典中搜索bash如下

$ curl dict://dict.org/d:bash:foldoc

结果将是,

bash

   Bourne Again SHell.  {GNU}'s {command interpreter} for {Unix}.
   Bash is a {Posix}-compatible {shell} with full {Bourne shell}
   syntax, and some {C shell} commands built in.  The Bourne
   Again Shell supports {Emacs}-style command-line editing, job
   control, functions, and on-line help.  Written by Brian Fox of
   {UCSB}.

14.使用代理下载文件

我们可以使用 -x 选项指定 cURL 使用代理来执行特定操作。我们需要指定代理的主机和端口。

$ curl -x proxysever.test.com:3128 http://google.com.in

15. 使用 SMTP 协议发送邮件

cURL 也可用于使用 SMTP 协议发送邮件。您应该指定发件人地址、收件人地址和邮件服务器 IP 地址,如下所示。

$ curl --mail-from blah@test.com --mail-rcpt tiamo@test.com smtp://mailserver.com

一旦输入上述命令,它将等待用户提供数据到邮件。编写完消息后,键入 。(句号) 作为最后一行,将立即发送电子邮件。

Subject: Testing
This is a test mail
.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。