什么是cURL
cURL是Client for URLs的缩写,是一个支持多种协议的数据传输命令行工具。支持的协议包括:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET 和 TFTP。除了命令行工具外,还有一个与之配套且开源的libcurl库。
本文主要介绍cURL命令行工具的常用命令,这对我们在进行网站开发或自动化处理一些任务时非常有用。cURL命令一般内置到绝大部分操作系统中,以下所有用法均可以通过man curl
查找。
获取网页
这个是最简单也是非常实用的用法,curl后直接跟url地址,如果成功返回的,会在控制台输出网页的内容。如:
下载单文件
上面的方法只能将URL的内容输出到控制台,如果我们想将一个URL资源下载到本地,使用-o, --output <file>
参数:
$curl -o rfc2616.txt https://tools.ietf.org/html/rfc2616
也可以直接使用-O, --remote-name
参数,该参数不需要指定文件,而是直接将URL资源下载到当前目录下:
$curl -O https://tools.ietf.org/html/rfc2616
当使用-o
或-O
参数时,终端会显示当前下载的百分比、下载速率、下载时间、剩余时间等信息,如下:
我们也可以指定--progress-bar
或-#
参数,需要展示当前下载百分比,如下:
curl -o rfc2616.txt -# https://tools.ietf.org/html/rfc2616
下载多文件
也可以同时下载多个文件,如:
$curl -o rfc2616.txt https://tools.ietf.org/html/rfc2616 -o rfc5741.txt https://tools.ietf.org/html/rfc5741
断点续传
如果我们在下载https://tools.ietf.org/html/rfc2616
资源时中途中断,我们可以使用-C -
告诉cURL自动从上次中断的地方开始下载:
$curl -O -C - https://tools.ietf.org/html/rfc2616
设置最大传输速率
使用--limit-rate <speed>
设置最大传输速率,默认是bytes/second
,也可以指定单位,k
或K
;m
或M
;g
或G
,如--limit-rate 200K
。
$curl -O --limit-rate 200K https://tools.ietf.org/html/rfc2616
自动跳转
有时候,当我们请求一些URL时,会返回301或302,并在头Location
中指定跳转的地址,我们可以使用-L
或--location
参数完成自动跳转,如:
$curl -L www.sina.com
只获取头信息
有时候我们只想获取一个URL的头信息而忽略其消息体,可以使用-I
或--head
,如:
$curl -I www.sina.com
设置请求头
使用-H, --header <header/@file>
参数设置请求头,其格式为:-H 'X-Custom-Header: X-Custom-Value'
。需要注意的是,如果想移除一个内置的请求头,Header
值设置为空且需要带上冒号,如-H 'Host:'
;如果是设置一个内容为空的Header
,Header
值设置为空且后面带上分号,如-H 'X-Custom-Header;'
,看一个完整的例子:
$curl -H "Content-Type:application/json" http://example.com
设置cookie
使用-b, --cookie <data>
参数设置cookie,其格式为:"NAME1=VALUE1; NAME2=VALUE2"
。如果没有指定=
,表示从文件中读取cooke。如果要保存服务器端返回的cookie,可以使用-c, --cookie-jar <filename>
参数。
$curl -c cookies http://example.com
$curl -b cookies http://example.com
设置User-Agent
使用-A, --user-agent <name>
参数设置UA:
$curl --user-agent "curl" http://example.com
设置Referer
使用-e, --referer <URL>
设置referer,如:
$curl --referer http://www.example.com http://www.example.com
POST请求
使用-d, --data <data>
参数设置POST请求的body数据,在网站开发中用的比较多的是POST application/x-www-form-urlencoded
和POST application/json
。
1. POST application/x-www-form-urlencoded
$curl -d "param1=value1¶m2=value2" -X POST http://www.example.com
等同于:
$curl -d "param1=value1¶m2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://www.example.com
也可以从文件中加载数据,如:
$curl -d "@data.txt" -X POST http://www.example.com
2. POST application/json
$curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://www.example.com
也可以从文件中加载数据,如:
$curl -d "@data.json" -X POST http://www.example.com
HTTP基本认证
使用-u, --user <user:password>
参数,指定用户名和密码在服务器进行认证:
$curl --user name:password example.com
网友评论