Linux之cURL命令实例指南
导读:本文提供一个cURL for Linux命令实用指南。
前言
在Linux系统下,cURL(client URL)是一个综合传输工具,既可以用来上传文件,也可以用来下载文件,在日常使用过程中,它通常都是以下载工具的角色出现,常用来检验一个网址是否可以访问。与cURL命令相似的,还有wget命令,二者在功能上具有很多类似的地方,但cURL由于可自定义各种请求参数所以在模拟Web请求方面更优秀;wget对于于支持ftp和Recursive所以在下载文件方面更擅长。
在本文中,我们将介绍cURL在Linux系统中的实用命令。跟随我的脚步,我会引导你完成Linux系统中这一强大实用的功能,并提供一系列示例,加深印象。
何为cURL
cURL是用于网站或API交互,向终端发送请求,返回响应或将数据记录到文件的强大工具。有些时候,它作为代码的一部分,将抓取或检索到的数据转给其它函数处理。
cURL通常用来从服务器上下载文件,并且执行的非常顺畅,但它并不一定有其它工具好用,比如wget命令。
接下来,开始介绍cURL的一些实用例子。
下载文件
cURL最基础的命令就是网站或文件下载。除非指定指定的协议,cURL默认使用HTTP做为协议。比如,要下载网站,使用如下之命令:
curl https://www.21cto.com
是的,后面可以是任意网站&网址。如下图:
这种没有加入任何参数的命令,在实际场合所用较少。该指令执行后,cURL就会提供相关页面的源代码。
我们会在终端中看到HTML5和其它Web脚本代码。这对于开发者而言,是有好多个用处的。比如可以将网站下载为html文档。
添加参数 -output 选项可以达到此目标。如下命令:
curl www.21cto.com --output 21cto.html
如此一来,下载完成就可以显示在浏览器中了。
如果你想下载文档,命令与上大致相同,确保使用--output选项即可,如同上图中的示例。
如果没有下载的是非文本文件,cURL会以二进制形式发送到终端。以下是将500K的Word文档下载下来的样子。
可以看到Word文档开始下载,并且在终端中显示下载进度,完成后此文件会保存到目录中。在本例中未指定任何目录,会保存到我们当前的工作目录,即运行cURL命令的目录。
另外,我们在命令中使用了 -L选项,这个选项在下载文件时是必要的。
重定向
如果使用cURL访问网站时,输出结果为空,则可能是该网址被cURL重定向到其它的url。默认情况下,cURL不会跟踪重定向,我们使用-L 参数来告诉它。
curl -L www.21cto.com
经过笔者研究,-L 参数适用于大多数网站,因此在下载时请加入这一参数。
断点续传
如果下载出现中断,或者在下载一个大文件时暂停时,cURL支持断点续传功能。想强制停止文件传输,可以使用ctrl+c组合键,结束在终端中的进程。
可以看到,我们的下载进程在进行状态下,被Ctrl+c中断了。我们使用如下语法恢复下载:
curl -C - 21cto.com/some-file.zip --output myfile.zip
这个-C 参数就是告诉cURL来恢复之前的文件传输。请注意,在-C后面有一个像减号参数(-),它便是恢复文件传输的参数。
可以看到,文件传输已经恢复,等待它完成下载即可。
指定超时时间
在命令中指定花费的时间。该参数很有用,cURL在默认状态下没有超时限制,会一直连接。如果我们不希望无限期挂起,则需要指定命令的执行时长。
该参数为 -m ,后面跟着超时的时间,这个 m 以秒数为单位,即在n秒内下载无论完成与否,即退出cURL所执行的操作。
比如希望cURL在执行一分钟后立即退出,使用如下命令:
curl -m 60 21cto.com
还可以指定另一种超时类型。如果一个网站连接较慢,可以告诉cURL在一定时间内放弃操作,以确保cURL不把时间浪费在没有响应的网站上,有可能网站限制连接,或者干脆Down机,也有可能域名无法解析等故障。
它也使用秒作为参数,参数为-connect-timeout
curl --connect-timeout 60 21cto.com
表单提交
POST方法是网站表单数据接收的常用方式。比如,在填写在线表单时,大多数使用POST来从浏览器提交数据。
cURL支持这种提交,使用-d选项。
curl -d 'name=user&gender=male' https://sso.21cto.com
如果想上传文件而不是纯文本,可使用如下语法:
curl -d @file-name https://sso.21cto.com
根据自己的需要 -d 可以使用任意多个参数,以指定上传的不同数据或文件名称。
如果你要将文件上传到FTP服务器,可以使用如下选项:
curl -T myfile.txt ftp://ftp.21cto.com/uploads/misc/
发送邮件
发送邮件的操作是将数据从你的电脑或相关设备上传到邮件服务器。cURL能够上传数据,我们就可以用它来发送邮件。
以下是通过SMTP服务器发邮件:
curl smtp://mail.example.com --mail-from me@me.com --mail-rcpt test@test.com
邮件内容需要这样的文件:
cat email.txt
From: Administrator<me@me.com>
To: test<test@test.com>
Subject: An Example Email
Data: Sat,7 Dec 2020 18:25:13
John,
Hope you have a great week end.
-- Admin Team
阅读邮件
cURL支持IMAP和POP3协议,用来从邮件服务器中阅读邮件。
以下使用IMAP登录:
curl -u 用户名:密码 imap://mail.imapmail.com
上面的命令将列出相关邮箱列表,但查看不到任何指定的邮件。需要使用-X选项来指定UID和指定消息。
curl -u 用户名:密码 imap://mail.imapmail.com -X 'UID FETCH 1234'
cURL和wget之间的区别
有时,人们会感到困惑,cURL和wget都能够从服务器来下载内容,这是它们两个唯一的共同点。
wget是下载网站的最佳工具,能够递归遍历目录和链接,可以下载整个网站。
如果要下载网站,请使用wget命令,如果用于上传文件需要用cURL,cURL也是下载单个文件的好帮手。
作者:苏起