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