[转]使⽤curl发送POST请求的⼏种⽅式
HTTP 的 POST 请求通常是⽤于提交数据,可以通过这篇⽂章来了解各种提交⽅式:。做 Web 后端开发时,不可避免地要⾃⼰给⾃⼰发请求来调试接⼝,这⾥要记录的内容是如何使⽤命令⾏⼯具curl来进⾏各种⽅式的 POST 请求。
application/x-www-form-urlencoded
最常见的⼀种 POST 请求,⽤ curl 发起这种请求也很简单。
1$ curl localhost:3000/api/basic -X POST -d 'hello=world'
multipart/form-data
这种请求⼀般涉及到⽂件上传。后端对这种类型请求的处理也复杂⼀些。
1$ curl localhost:3000/api/multipart -F raw=@raw.data -F hello=world
application/json
1$ curl localhost:3000/api/json -X POST -d '{"hello": "world"}' --header "Content-Type: application/json"
跟发起application/x-www-form-urlencoded类型的 POST 请求类似,-d参数值是 JSON 字符串,并且多了⼀个Content-Type: application/json指定发送内容的格式。
这个例⼦和application/x-www-form-urlencoded中的例⼦发起的请求,到了 Web 后端经过解析后,得到的结果都是hello: world键值对。
⽂件内容作为要提交的数据
如果要提交的数据不像前⾯例⼦中只有⼀个hello: world键值对,数据⽐较多,都写在命令⾏⾥很不⽅便,也容易出错,那么可以把数据内容先写到⽂件⾥,通过-d @filename的⽅式来提交数据。这是-d参数的⼀种使⽤⽅式,所以前⾯⽤到-d参数的地⽅都可以这样⽤。curl是什么命令
实际上就是把-d参数值写在命令⾏⾥,变成了写在⽂件⾥。跟multipart/form-data中上传⽂件的 POST ⽅式不是⼀回事。@符号表明后⾯跟的是⽂件名,要读取这个⽂件的内容作为-d的参数。
例如,有⼀个 JSON ⽂件data.json内容如下:
1 2 3 4 5{
"hello": "world",
"xxx": "yyy",
"a": ["ooo", "mmm"] }
就可以通过
1$ curl localhost:3000/api/json -X POST -d @data.json --header "Content-Type: application/json"
来提交数据。
如果要⽤application/x-www-form-urlencoded⽅式提交,后端解析出来同样的数据,那么-d的参数是这样的(注意数组参数的写法)
1hello=world&xxx=yyy&a[]=ooo&a[]=mmm
把这个字符串直接作为-d的参数或者把它写到⽂件然后通过-d @的⽅式,发起 POST 请求,⾏为和结果是⼀样的。
1 2 3$ curl localhost:3000/api/basic -X POST -d 'hello=world&xxx=yyy&a[]=ooo&a[]=mmm' $ curl localhost:3000/api/basic -X POST -d @

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。