Curl命令示例

时间:2020-03-05 15:27:34  来源:igfitidea点击:

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&param2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost/data