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