使用 curl 命令发送 POST 请求的几种方式
HTTP 的 POST 请求通常是用于提交数据,可以通过这篇文章来了解各种提交方式:常见的 POST 提交数据方式。
做 Web 后端开发时,不可避免地要自己给自己发请求来调试接口,这里要记录的内容是如何使用命令行工具 curl 来进行各种方式的 POST 请求。
1. application/x-www-form-urlencoded
最常见的一种 POST 请求,用 curl 发起这种请求也很简单。
$ curl localhost:3000/api/basic -X POST -d 'hello=world'
2.multipart/form-data
$ curl localhost:3000/api/multipart -F raw=@raw.data -F hello=world
3.application/json
$ 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 参数的地方都可以这样用。
例如,有一个 JSON 文件 data.json 内容如下:
{
“hello”: “world”,
“xxx”: “yyy”,
“a”: [“ooo”, “mmm”]
}
就可以通过一下命令来提交数据。
$ curl localhost:3000/api/json -X POST -d @data.json --header "Content-Type: application/json"
如果要用 application/x-www-form-urlencoded 方式提交,后端解析出来同样的数据,那么 -d 的参数是这样的(注意数组参数的写法)
hello=world&xxx=yyy&a[]=ooo&a[]=mmm
把这个字符串直接作为 -d 的参数或者把它写到文件 data.txt 然后通过 -d @data.txt 的方式,发起 POST 请求,行为和结果是一样的。
$ curl localhost:3000/api/basic -X POST -d 'hello=world&xxx=yyy&a[]=ooo&a[]=mmm'
$ curl localhost:3000/api/basic -X POST -d @data.txt
延伸阅读:
设置header与表单
curl 'http://xxxxxxxxx/vehicles?page=1&size=20&number=8' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Accept-Language: zh,en;q=0.9,ja;q=0.8,zh-TW;q=0.7,fr;q=0.6,zh-CN;q=0.5' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36' \
-H 'Accept: application/json, text/plain, */*' \
-H 'Referer: http://xxxxxxxxx/' \
-H 'userId: 454' \
-H 'Connection: keep-alive' \
-H 'token: af0d8773933eaeffc81d97924bd2a8fc' \
--compressed
curl发送http请求保存结果到文件
curl --header “Content-Type:application/json” ‘http://hostname:ip/get/path’ > /save/to/path/filename.json
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)