Curl命令的data data-ascii data-binary data-raw和data-urlencode选项

Curl命令为HTTP POST方法提供了若干种设置数据的选项,这里比较一下。




  1. 首先说明如下给出的选项的相同点



模拟Web页面中提交表单,用于POST请求
默认Content-type为application/x-www-form-urlencoded
选项的value如果是@a_file_name,表示数据来自一个文件
选项的value如果是-,表示读取stdin作为提交的数据,即从标准输入设备即时提供数据值



  1. 不同点



1) -d,–data key=value



数据为纯文本数据。



value如果是@a_file_name,表示数据来自一个文件,文件中的回车符和换行符将被转换



示例:



curl -X POST -d mykey1=myvalue1 http://myapi.url.com



curl -X POST -d mykey1=myvalue1 -d mykey2=myvalue2 http://myapi.url.com



curl -X POST -d ‘mykey1=myvalue1&mykey2=myvalue2’ http://myapi.url.com



curl -X POST -H Content-Type:application/x-www-form-urlencoded -d ‘mykey1=myvalue1&mykey2=myvalue2’ http://myapi.url.com



curl -X POST -H Content-Type:application/json -d ‘{“mykey1”: “myvalue1”, “mykey1”: “myvalue2”}’ http://myapi.url.com



curl -X POST -H Content-Type:application/x-www-form-urlencoded -d mykey1=@myvalue1_from_file http://myapi.url.com



2) –data-ascii <key=value>



完全等价于-d

3) –data-binary key=value



HTTP POST请求中的数据为纯二进制数据
value如果是@file_name,则保留文件中的回车符和换行符,不做任何转换



4) –data-raw key=value



@也作为普通字符串,不会作为文件名给出文件名的标志。即value如果是@file_name,只表示值为“@file_name”的字符串。
其他等价于-d



5) –data-urlencode key=value



先对数据进行URL编码,再发送给HTTP服务器,即对表单中的字段值进行URL编码后再发送。
为了兼容CGI,格式为“name+分隔符+content”,如下所示:



name=content,将content进行URL编码,然后提交给HTTP服务器
=content,同上,只是未给出引用的name
content,同上,注意content中不能包含=和@符号
name@filename,从文件filename中读取数据(包括换行符),将读取的数据进行URL编码,然后提交给HTTP服务器
@filename,同上
其他等价于-d




  1. 补充-F, –form选项



模拟发送表单,默认即POST,且默认Content-Type:multipart/form-data。



示例:



curl -F mykey1=myvalue1 -F mykey2=myvalue2 http://myapi.url.com



curl -F myfile1=@file_name1 -F myfile1=@file_name2 http://myapi.url.com



curl -X POST -H Content-Type:multipart/form-data -F myfile1=@file_name1 -F myfile1=@file_name2 http://myapi.url.com



https://blog.csdn.net/taiyangdao/article/details/77020762



-d,–data DATA HTTP POST数据(H)
–data-raw DATA HTTP POST数据,允许’@’(H)
–data-ascii DATA HTTP POST ASCII数据(H)
-数据二进制DATA HTTP POST二进制数据(H)
–data-urlencode DATA HTTP POST数据url编码(H)
-委托STRING GSS- API委派权限
-使用HTTP摘要认证(H)
–disable-eprt使用EPRT或LPRT禁止(F)
–disable-epsv使用EPSV禁止(F)
–dns-servers要使用的DNS服务器地址:1.1.1.1; 2.2.2.2
–dns-interface用于DNS请求的接口
–dns-ipv4-addr IPv4地址用于DNS请求,点符号
–dns-ipv6-addr用于DNS请求的IPv6地址,点符号§



https://www.jianshu.com/p/d957aae01730



-G
-G参数用来构造 URL 的查询字符串。



$ curl -G -d ‘q=kitties’ -d ‘count=20’ https://google.com/search
上面命令会发出一个 GET 请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略–G,会发出一个 POST 请求。



如果数据需要 URL 编码,可以结合–data–urlencode参数。



$ curl -G –data-urlencode ‘comment=hello world’ https://www.example.com



http://www.ruanyifeng.com/blog/2019/09/curl-reference.html


Category linux