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

网友投稿 1606 2022-05-30

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 302 Moved

302 Moved

The document has moved here

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

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

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

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

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

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

使用 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.使用代理下载文件

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

我们可以使用 -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 .

FTP Linux PHP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kotlin系列六:从集合谈Kotlin中的Lambda编程
下一篇:滚雪球学 Python 之怎么玩转时间和日期库
相关文章