Curl命令示例
Curl是一个出色的工具,默认情况下在基于UNIX的系统中可用。
它是一个命令行实用程序和一个库。
在对URL访问进行故障排除和下载文件时,此功能非常有用。
Curl支持多种协议,包括HTTP,HTTPS,FTP,FTPS,SFTP等。
如果我们未明确指定任何协议,它将默认为HTTP。
libcurl为所有与传输相关的功能提供了Curl的支持。
Curl提供了许多有用的技巧,例如代理支持,用户身份验证,FTP上传,HTTP发布,SSL连接,Cookie,文件传输简历,Metalink等。
在本教程中,我们将讨论如何在Linux上使用curl命令和使用curl选项下载文件。
curl软件包已预安装在当今的大多数Linux发行版中。
-V或者--version选项将返回版本,以及当前版本中受支持的协议和功能。
$curl -V curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
在Ubuntu/Debian上安装Curl
$sudo apt install curl
在CentOS/Fedora上安装Curl
$sudo yum install curl
如何使用curl命令
curl命令允许我们在Linux中使用CLI(命令行)下载和上传数据。
这是它的语法:
$curl [options] [URL]
- options-以一个或者两个破折号开头的Curl选项。
- URL-远程服务器的URL。
可以使用curl的最简单形式是没有任何选择,它将显示在[url]中指定的资源到标准输出。
如果我们未指定协议,curl会尝试猜测我们要使用的协议,并且默认为HTTP。
$curl https://theitroad.com/linux-how-to/how-to-install-terraform-on-centos-ubuntu/
我们可以将URL作为输入传递给curl命令,然后将输出重定向到文件。
例如:
$curl https://theitroad.com/linux-how-to/how-to-install-terraform-on-centos-ubuntu install_terraform.html
URL语法取决于协议,并且可以将多个URL编写为以下集合:
$curl https://website.{one, two, three}.com
下载同名文件
如果需要,可以强制curl使用与本地文件名相同的名称来下载文件。
可以使用-O命令行选项来完成。
$curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso $ls ubuntu-18.04.2-desktop-amd64.iso $
下载多个文件
要一次下载多个文件,可以使用多个-O标志,后跟要下载的文件的URL。
$curl -O [URL1] -O [URL2] -O [URL3] ...
具有数字序列系列的URL可以写为:
$curl ftp://ftp.example.com/file[1-30].jpeg
$curl -O localhost/file.pdf -O localhost/file1.pdf % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 20597 100 20597 0 0 1436k 0 --:--:-- --:--:-- --:--:-- 1436k 100 20597 100 20597 0 0 9.8M 0 --:--:-- --:--:-- --:--:-- 9.8M
如果要使用不同的名称保存多个文件,可以使用嵌套的-o选项,如下所示。
$curl -o file2.pdf localhost/file.pdf -o file3.pdf localhost/file1.pdf % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 20597 100 20597 0 0 957k 0 --:--:-- --:--:-- --:--:-- 957k 100 20597 100 20597 0 0 19.6M 0 --:--:-- --:--:-- --:--:-- 19.6M
curl输出中显示进度条
在文件下载过程中,Curl显示进度表,以指示传输速率,传输的数据量,剩余时间等。
$curl -# -O http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso ############### 20.9%
如果我们喜欢进度条而不是仪表,则可以使用如上例中的-option,如果要完全禁用它,则可以使用–silent。
$curl -O --silent http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso
如果要查看文件下载所花费的时间,可以按如下所示添加时间命令。
$time curl --output file1.pdf localhost/pdf-test.pdf -# ################################################################################################################################################## 100.0% real 0m0.060s user 0m0.016s sys 0m0.047s
curl获取URL的HTTP标头
要获取指定的HTTP标头,请使用-I标志:
$curl -I www.theitroad.com HTTP/1.1 301 Moved Permanently Date: Sat, 13 Apr 2019 16:39:03 GMT Connection: keep-alive Cache-Control: max-age=3600 Expires: Sat, 13 Apr 2019 17:39:03 GMT Location: https://www.theitroad.com/ Server: cloudflare CF-RAY: 4c6edfb8a8437c78-BEG
有时,我们可能会遇到一个URL,该URL会出现“已移动”或者“永久移动”之类的错误。
URL重定向到其他URL时通常会发生这种情况。
例如,google.com重定向到www URL,因此会出现类似以下的错误:
$curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>
要告诉curl遵循重定向,请改用-L命令行选项。
$curl -L google.com
如果我们尝试从中下载文件的URL具有任何301重定向,则可能无法下载文件。
例如,如果URL具有从http到https的重定向,则必须使用选项-L跟随重定向和下载。
$curl -o test.txt -L http://www.test.com % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:09 --:--:-- 0 100 364k 0 364k 0 0 18213 0 --:--:-- 0:00:20 --:--:-- 100k
如何限制最大传输速率
限制数据传输速率的用法是:
$curl --limit-rate [value] [URL]
该值可以表示为字节,后缀为k的千字节,后缀为m的兆字节,以及后缀g的千兆字节。
以下命令将下载速度限制为1mb:
$curl --limit-rate 1m -O http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso
使用或者不使用身份验证从FTP服务器下载文件或者将文件上传到FTP服务器
要使用curl命令访问受保护的FTP服务器,我们需要使用-u标志以及用户名和密码。
以下命令将列出用户主目录中的所有文件和目录。
$curl -u USERNAME:PASSWORD ftp://ftp.theitroad.com/
要下载文件,请使用:
$curl -u USERNAME:PASSWORD ftp://ftp.theitroad.com/file.tar.gz
要将文件上传到FTP服务器,请使用-T标志:
$curl -T newfile.tar.gz -u USERNAME:PASSWORD ftp://ftp.theitroad.com/
注意:如果FTP服务器允许匿名登录,则无需使用-u username:password
恢复中断的下载
如果下载由于某种原因而中断,则可以使用-C恢复下载,以从中断处开始下载。
$curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso
$curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04.2-desktop-amd64.iso ** Resuming transfer from byte position 2297856 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 1901M 0 9842k 0 0 734k 0 0:44:10 0:00:13 0:43:57 339k
在Curl中管理SSL证书
如果我们在curl中使用的URL给出SSL错误,则可以使用-k选项跳过SSL。
$curl -o -k https://www.test.com % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 364k 0 364k 0 0 34147 0 --:--:-- 0:00:10 --:--:-- 101k
如果要在curl中验证自签名证书,则可以使用--cacert选项。
curl --cacert myssl.crt -O https://test.com/file.tgz
伪造Curl中的Useragent
如果由于缺少适当的用户代理而使用的URL阻止了卷曲,则可以使用curl中的选项“ -A”来欺骗用户代理,以模仿浏览器的使用体验。
$curl -A "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5" -O http://localhost/file1.pdf % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 20597 100 20597 0 0 874k 0 --:--:-- --:--:-- --:--:-- 874k
带有Curl的HTTP POST URL
我们可以使用-X选项以curl方式通过POST发送数据。
$curl -d "param1=value1¶m2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost/data