Linux curl命令get/post提交資料、json和上傳檔案全攻略
Http協議支援:GET、HEAD、PUT、DELETE、POST、OPTIONS等6種請求方法;在這裡我們通過linux curl命令,介紹其中的兩種請求方法:GET、POST;使用linux curl命令通過GET、POST命令提交資料、使用POST上傳檔案,同時使用PHP語言介紹它們提交的資料和上傳的檔案的接受方法。
一、測試前準備:
為了測試方便,我們在本站的站點根目錄下,寫了一個臨時接受資料指令碼"test.php",用來接收提交上來的資料;所有的GET、POST請求都發送到“http://aiezu.com/test.php”,指令碼的內容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
if ( isset( $_SERVER [ $key ] ) ) {
if ( ! empty ( $ $name ) ) {
|
二、GET請求方式:
GET方式只能提交key/value對資料,不能上傳二進位制檔案。使用linux curl命令通過GET方法提交資料主要分為兩大類,1:直接將資料附加在URL後面;2:使用"-G"或者"--get"引數配合"-d"、"--data"、"--data-ascii"、"--data-urlencode"等引數,引數詳細介紹請參考:“Linux curl命令詳解”頁面中的“資料傳輸”組的介紹。
1、將資料直接附加在URL後面:
1 2 3 4 5 6 7 8 9 |
|
2、使用"-G"引數配合"-d"引數:
1 2 3 4 5 6 7 8 9 |
|
由於"-G"等價於"--get","-d"等價於"--data"、"--data-ascii",所以下面幾種方法和上面的方法是等價的:
1 2 3 4 |
|
3、帶特殊字元資料使用“--data-urlencode”:
1 2 3 4 5 6 7 8 9 |
|
4、從檔案中獲取資料:
1 2 3 4 5 6 7 8 9 10 11 |
|
三、POST基本型別請求方式(-d):
基本的POST請求方式,只能提交key/value對資料,不能上二進位制檔案;引數詳細介紹請參考:“Linux curl命令詳解”頁面中的“資料傳輸”組的介紹。此方法的http請求頭大致如下:
1 2 3 4 5 6 |
|
對、正是相當於html的如下表單:
1 2 3 |
|
1、直接設定POST資料:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
2、從檔案中獲取POST資料:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
四、POST多型別表單資料請求方式(-F):
POST多型別表單資料請求方式支援提交key/value值對資料、和上傳二進位制檔案,是使用最多的一種方式。引數詳細介紹請參考:“Linux curl命令詳解”頁面中的“資料傳輸”組的介紹。此方法的http請求頭大致如下:
1 2 3 4 5 6 7 |
|
相當於HTML的如下表單:
1 2 3 |
|
注意:"-F"與"-d"有一點不同,"-d"可以使用“-d 'a=1&b=2'”將兩個欄位放一起;而"-F"不行,一個"-F"只能包含一個key/value對,如:"-F a=1 -F b=2"。
1、提交key/value值對資料(--form、-F):
1 2 3 4 5 6 7 8 9 10 11 |
|
2、使用"@"、"<"失去特殊意義的"--form-string":
1 2 3 4 5 6 7 8 9 10 11 |
|
3、從檔案中獲取key/value對中的"value"("<"字元的特殊妙用):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
五、POST上傳檔案(-F "@"字元的妙用):
這裡還是介紹第四步的“-F”引數,不過現在是介紹它的上傳檔案;
1、自動識別檔案型別:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
2、告訴http伺服器後端指令碼,這是一張圖片,不是一個文字檔案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
六、POST提交JSON資料:
下面程式碼為linux curl命令POST方式提交JSON資料的方法、已經使用PHP語言的接收程式碼:
1 2 3 4 5 6 7 8 9 10 11 |
|
接收JSON的程式碼段:
1 2 3 4 5 |
|
提示:除了Content-Type為multipart/form-data,其他所有POST的資料都可以從php://input流中讀得,如:POST的XML資料,二進位制