man网址: https://curl.haxx.se/docs/manpage.html
使用post传递多个参数
-d | --data | --data-ascii <data>|<key=value>:
在POST请求中向 server 发送数据 ,内容必须已经被url-encoded,curl不会对其进行处理。
使用的Content-type为application/x-www-form-urlencoded(-F | --form使用的是multipart/form-data)
如果多次使用 , 数据碎片 会使用&符号 连接
@file_name,表示数据来自一个文件,文件中的回车符和换行符将被转换
符号-表示数据来自 stdin ,即标准输入设备--data-raw <data>|<key=value>:
除了不处理@字符, 其他等同于-d | --data--data-binary <data>:
HTTP POST请求中的数据为 纯二进制数据 , curl 不会对数据进行二次处理
如果是@file_name, 则 保留文件中的回车符和换行符,不做任何转换
默认的Content-Type为application/x-www-form-urlencoded
如果多次使用,则会依次追加内容, 和-d | --data一样, 即使用&符号 连接--data-urlencode <data>|<key=value>:
除了会先对数据进行URL编码,其他等同于-d | --data
为了兼容CGI, 数据碎片 支持的格式有:content、=content、name=content、@fileName、name@filename总结: 向
webServer传输json数据时,只要数据不换行,那么使用--data和--data-binary没有区别,
例如 使用 curl 访问 REST API :
curl -X POST " http://baidu.com" \
-H "accept: application/json" \
-H "Cookie: accessToken=1" \
-H "Content-Type: application/json" \
-d "{\"regionList\":[{\"regionCode\":\"xx\"},{\"regionCode\":\"yy\"}]}"
常用参数
使用 -X 设置访问方式
curl -X POST http://baidu.com
curl --request POST http://baidu.com
使用 -o 输出到文件
curl -o /tmp/baidu.com http://baidu.com
curl --output /tmp/baidu.com http://baidu.com
使用 -s 模式,不显示进度条
curl -s http://baidu.com
curl --silent http://baidu.com
使用 -D 保存响应头
curl -D /tmp/header.txt http://baidu.com
curl --dump-header /tmp/header.txt http://baidu.com
使用 -I 只显示响应头 (大写的i)
curl -I http://baidu.com
curl --head http://baidu.com
当无法直接使用 -I 时,使用如下命令模拟 -I 效果
curl -s -D - -o /dev/null http://baidu.com
-
-D -表示保存响应头到-(表示stdout) ,使用这种方式将响应头显示在stdout中 -
-o /dev/null表示响应输出到文件(/dev/null) -
-s表示使用安静模式,没有进度条
使用 -c 保存cookie
curl -c /tmp/cookie.txt http://baidu.com
curl --cookie-jar /tmp/cookie.txt http://baidu.com
使用 -b 带Cookie访问
curl -b "name1=val1;name2=val2" http://baidu.com
curl --cookie "name1=val1;name2=val2" http://baidu.com
使用 -L 跟随重定向
curl 默认不跟随重定向
curl -L http://baidu.com
curl --location http://baidu.com
使用 -H 指定请求头的内容
尤其有用的是, 当你只能通过IP地址访问某网站时,但是网站要接收域名
curl -v -HHost:httpbin.example.com http://baidu.com
curl -v --header Host:httpbin.example.com http://baidu.com
指定 Content-Type
curl -v -H "Content-Type: application/octet-stream" http://baidu.com
指定其他任意Header Key
curl -v -H "header_key1:value1" -H "header_key2:value2" http://baidu.com
使用 -v 显示详细信息
包括请求和返回的过程,
> 表示curl发出的信息,
< 表示curl获得的信息
curl -v http://baidu.com
获取api返回的 Cookie
function getCookie() {
local tmpUserName="admin";
local tmpPwd="admin";
local tmpLoginApiPath="http://mylogin.api.path"
local tmpCookieStr="";
OLD_IFS="$IFS"
IFS=$'\n'
for line in $(curl -X POST -s -D - -o/dev/null \
--header "Content-type:application/json" \
--data-binary '{"username":"'${tmpUserName}'","password":"'${tmpPwd}'","client":"browser"}' \
${tmpLoginApiPath} \
| grep "Set-Cookie" | grep -oP '(\S+=\S*;)');do
tmpCookieStr="$line $tmpCookieStr"
done
IFS="$OLD_IFS"
echo $tmpCookieStr
}
访问 HTTPS网站
使用 -k 进行非安全方式访问HTTPS网站
curl -k https://baidu.com
curl --insecure https://baidu.com
使用 --key 和 --cert 以证书方式访问 https 网站
curl -k --key "KeyContent" --cert "CertContent" https://baidu.com
curl -k --key "@keyFileName" --cert "@certFileName" https://baidu.com
指定 TLS version
curl --insecure --tlsv1.2 https://baidu.com