CURL 發送POST請求
curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://192.168.0.1:8001/test"
參數 內容
-H 請求頭
-d POST內容
-X 請求協議
簡介
curl 是常用的命令行工具,用來請求 Web 服務器。它的名字就是客戶端(client)的 URL 工具的意思。它的功能非常強大,命令行參數多達幾十種。如果熟練的話,完全可以取代 Postman 這一類的圖形界面工具。
-A
-A參數指定客戶端的用戶代理標頭,即User-Agent。curl 的默認用戶代理字符串是curl/[version]。
上面命令將User-Agent改成 Chrome 瀏覽器。
上面命令會移除User-Agent標頭。
也可以通過-H參數直接指定標頭,更改User-Agent。
-b
-b參數用來向服務器發送 Cookie。
上面命令會生成一個標頭Cookie: foo=bar,向服務器發送一個名為foo、值為bar的 Cookie。
上面命令發送兩個 Cookie。
上面命令讀取本地文件cookies.txt,里面是服務器設置的 Cookie(參見-c參數),將其發送到服務器。
-c
-c參數將服務器設置的 Cookie 寫入一個文件。
上面命令將服務器的 HTTP 回應所設置 Cookie 寫入文本文件cookies.txt。
-d
-d參數用於發送 POST 請求的數據體。
使用-d參數以后,HTTP 請求會自動加上標頭Content-Type : application/x-www-form-urlencoded。並且會自動將請求轉為 POST 方法,因此可以省略-X POST。
-d參數可以讀取本地文本文件的數據,向服務器發送。
上面命令讀取data.txt文件的內容,作為數據體向服務器發送。
--data-urlencode
--data-urlencode參數等同於-d,發送 POST 請求的數據體,區別在於會自動將發送的數據進行 URL 編碼。
上面代碼中,發送的數據hello world之間有一個空格,需要進行 URL 編碼。
-e
-e參數用來設置 HTTP 的標頭Referer,表示請求的來源。
上面命令將Referer標頭設為https://google.com?q=example。
-H參數可以通過直接添加標頭Referer,達到同樣效果。
-F
-F參數用來向服務器上傳二進制文件。
上面命令會給 HTTP 請求加上標頭Content-Type: multipart/form-data,然后將文件photo.png作為file字段上傳。
-F參數可以指定 MIME 類型。
上面命令指定 MIME 類型為image/png,否則 curl 會把 MIME 類型設為application/octet-stream。
-F參數也可以指定文件名。
上面命令中,原始文件名為photo.png,但是服務器接收到的文件名為me.png。
-G
-G參數用來構造 URL 的查詢字符串。
上面命令會發出一個 GET 請求,實際請求的 URL 為https://google.com/search?q=kitties&count=20。如果省略--G,會發出一個 POST 請求。
如果數據需要 URL 編碼,可以結合--data--urlencode參數。
-H
-H參數添加 HTTP 請求的標頭。
上面命令添加 HTTP 標頭Accept-Language: en-US。
上面命令添加兩個 HTTP 標頭。
上面命令添加 HTTP 請求的標頭是Content-Type: application/json,然后用-d參數發送 JSON 數據。
-i
-i參數打印出服務器回應的 HTTP 標頭。
上面命令收到服務器回應后,先輸出服務器回應的標頭,然后空一行,再輸出網頁的源碼。
-I
-I參數向服務器發出 HEAD 請求,然會將服務器返回的 HTTP 標頭打印出來。
上面命令輸出服務器對 HEAD 請求的回應。
--head參數等同於-I。
-k
-k參數指定跳過 SSL 檢測。
上面命令不會檢查服務器的 SSL 證書是否正確。
-L
-L參數會讓 HTTP 請求跟隨服務器的重定向。curl 默認不跟隨重定向。
--limit-rate
--limit-rate用來限制 HTTP 請求和回應的帶寬,模擬慢網速的環境。
上面命令將帶寬限制在每秒 200K 字節。
-o
-o參數將服務器的回應保存成文件,等同於wget命令。
上面命令將www.example.com保存成example.html。
-O
-O參數將服務器回應保存成文件,並將 URL 的最后部分當作文件名。
上面命令將服務器回應保存成文件,文件名為bar.html。
-s
-s參數將不輸出錯誤和進度信息。
上面命令一旦發生錯誤,不會顯示錯誤信息。不發生錯誤的話,會正常顯示運行結果。
如果想讓 curl 不產生任何輸出,可以使用下面的命令。
-S
-S參數指定只輸出錯誤信息,通常與-s一起使用。
上面命令沒有任何輸出,除非發生錯誤。
-u
-u參數用來設置服務器認證的用戶名和密碼。
上面命令設置用戶名為bob,密碼為12345,然后將其轉為 HTTP 標頭Authorization: Basic Ym9iOjEyMzQ1。
curl 能夠識別 URL 里面的用戶名和密碼。
上面命令能夠識別 URL 里面的用戶名和密碼,將其轉為上個例子里面的 HTTP 標頭。
上面命令只設置了用戶名,執行后,curl 會提示用戶輸入密碼。
-v
-v參數輸出通信的整個過程,用於調試。
--trace參數也可以用於調試,還會輸出原始的二進制數據。
-x
-x參數指定 HTTP 請求的代理。
上面命令指定 HTTP 請求通過myproxy.com:8080的 socks5 代理發出。
如果沒有指定代理協議,默認為 HTTP。
上面命令中,請求的代理使用 HTTP 協議。
-X
-X參數指定 HTTP 請求的方法。
上面命令對https://www.example.com發出 POST 請求。
