若是要提交的數據不像前面例子中只有一個 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 |