15 个实用的 Linux cURL 命令示例(cURL 下载示例)
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
.
- 点赞
- 收藏
- 关注作者
评论(0)