1. 程式人生 > 其它 >使用 curl 命令傳送 POST 請求的幾種方式

使用 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 [email protected] -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 引數的地方都可以這樣用。

實際上就是把 -d 引數值寫在命令列裡,變成了寫在檔案裡。跟 multipart/form-data 中上傳檔案的 POST 方式不是一回事。@ 符號表明後面跟的是檔名,要讀取這個檔案的內容作為 -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

 
原文連結:https://blog.csdn.net/JineD/article/details/108001776