什么是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









网友评论