一、curl请求类型
1.1 GET请求
curl默认就是get请求, 如果带有queryParam, 需要先手动urlEncode
get请求使用encode前的参数:
curl -v -X GET -G 'http://localhost:8083/get/objectData' --data-urlencode 'params={"abc":"va"}'
(-G 表示强制将body的参数放到get的url上)
1.2 POST/FORM请求
curl -X POST 或 curl -H 'content-Type:application/x-www-form-urlencode’均可以
如果用encode前的参数, 用--data-raw 'doctype=0"epid=&message=<p>11</p>
如果用encode后的参数, 用--data'doctype=0"epid=&message=%3Cp%3E11%3C%2Fp%3E'
或
-d'doctype=0"epid=&message=%3Cp%3E11%3C%2Fp%3E'
1.3 POST/JSON
curl -X POST -H 'content-Type:application/json
如果要带参数: 直接用-d
或--data
即可
二、常见场景
2.1 常见命令选项
curl -i #响应显示response head
curl -v #显示http通信过程,包括端口连接和request/response头信息
curl --trace output.txt #保存详细通信过程到文件
curl --cookie-jar output.txt #或`curl -c`,将cookie以特定格式写到指定文件(生效域/失效时间)
curl --cookie input.txt #或`curl -b`,从指定文件读取cookie并请求
curl --cookie 'k=v' #或`curl -b`,指定完整cookie(多个cookie选项会覆盖)并请求
curl --dump-header #或`curl -D`,将响应头写到指定文件
curl --retry n #如果失败重试的次数
curl --retry-delay seconds #重试的间隔
curl -s #或--silent,静默不显示请求的中间过程
curl --upload-file FILE #或`curl -T`,上传文件
curl --output #或`curl -o`把输出到该文件中
curl --proxy <host[:port]> #或`curl -x`通过代理
curl --user-agent #或`curl -A`,设置user-Agent信息
curl -e <URL> #或`curl --referer`设置Referrer URL
2.2 --write-out
或-w
,即curl正常返回后的输出内容,如果带变量需要%{variable_name}
这样引用。
常用内置变量:
http_code #http状态码,如200成功,301转向,404未找到,500服务器错误等
time_total #总时间,按秒计。精确到小数点后三位
time_namelookup #DNS解析时间,从请求开始到DNS解析完毕所用时间
time_connect #连接时间,包括TCP连接时间和DNS解析时间,如果要得到连接时间减去time_namelookup时间即可
time_appconnect #连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间
content_type #返回的content-Type
2.3 场景总结
- 保存响应结果
curl http://www.baidu.com >> output.txt
- 保存整个网页
curl -o output.txt http://www.baidu.com
- 保存下载的文件
curl -O http://www.kingle.com/hello.sh #这里后面的url要具体到某个文件,不然抓不下来
- 测试请求状态码
curl -o /dev/null -s -w %{http_code} www.baidu.com
- 通过代理访问
curl -x 192.168.100.100:1080 http://www.baidu.com
- 保存响应的cookie
curl -c cookiec.txt http://www.baidu.com
- 保存响应的header
curl -D resHead.txt http://www.baidu.com
- 使用保存的cookie方法
使用保存的cookie信息访问可以避免被监视非常规访问
curl -b cookiec.txt http://www.baidu.com
- 特定的user-agent
比如有些网站需要使用特定的浏览器去访问
curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.baidu.com
- 设置refer
防止被识别为盗链
curl -e "www.baidu.com" http://www.mail.baidu.com
- 不显示进度信息
curl -s http://www.baidu.com
- 压缩
用--compressed
- 结果不打印
用管道> /dev/null 2>&1