查看原文
其他

Linux之cURL命令实例指南

21CTO 2022-05-25
导读:本文提供一个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也是下载单个文件的好帮手。


作者:苏起


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存