若是要提交的数据不像前面例子中只有一个 hello: world
键值对,数据比较多,都写在命令行里很不方便,也容易出错,那么能够把数据内容先写到文件里,经过 -d @filename
的方式来提交数据。这是 -d
参数的一种使用方式,因此前面用到 -d
参数的地方均可以这样用。数组
实际上就是把 -d
参数值写在命令行里,变成了写在文件里。跟 multipart/form-data
中上传文件的 POST 方式不是一回事。@
符号代表后面跟的是文件名,要读取这个文件的内容做为 -d
的参数。bash
例如,有一个 JSON 文件 data.json
内容以下:app
1 2 3 4 5 |
{ "hello": "world", "xxx": "yyy", "a": ["ooo", "mmm"] } |
就能够经过curl
1 |
$ curl localhost:3000/api/json -X POST -d @data.json --header "Content-Type: application/json" |
来提交数据。工具
若是要用 application/x-www-form-urlencoded
方式提交,后端解析出来一样的数据,那么 -d
的参数是这样的(注意数组参数的写法)
1
|
hello=world&xxx=yyy&a[]=ooo&a[]=mmm |
把这个字符串直接做为 -d
的参数或者把它写到文件 data.txt
而后经过 -d @data.txt
的方式,发起 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 @data.txt |