題 執行POST請求的cURL命令行語法是什麼?


我該怎麼做? POST 要求與 捲曲 命令行工具?


2088
2017-09-17 15:39


起源




答案:


有字段:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

使用單獨指定的字段:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

多:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

包含字段和文件名的多部分:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

沒有數據:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

有關更多信息,請參閱 cURL手冊。該 有關模擬Web瀏覽器的cURL教程 很有幫助。

使用libcurl,使用 curl_formadd() 在以通常的方式提交表單之前構建表單的功能。見 libcurl文檔 欲獲得更多信息。

對於大文件,請考慮添加參數以顯示上載進度:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

-o output 是必需的,否則不會出現進度條。


2414
2017-09-17 15:43



@LauriRanta --data-urlencode (沒有破折號),至少在最近的版本中 - waitinforatrain
如果您需要使用PUT更新資源,也可以工作:curl -X PUT ... - Subfuzion
我無法理解......我什麼時候能做到 With Fields,當時 Multipart 什麼時候 Without Data? - CodyBugstein
代替 --data 您可以使用 -d。 - user35538
我有一系列的領域。我怎樣才能做到這一點? - ARUNBALAN NV


對於包含XML的RESTful HTTP POST:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

或者對於JSON,使用此:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

這將讀取名為的文件的內容 filename.txt 並將其作為發布請求發送。


487
2018-03-10 08:29



@ tom-wijsman解釋: curl -X POST 暗示HTTP POST請求, -d 參數(長版: --data)告訴curl接下來將是POST參數,和 @filename 指定文件的內容 filename 作為參數。這種方法最適用於Twitter,Facebook,各種其他Web服務(包括Ruby on Rails)以及CouchDB等數據庫的HTTP API的RESTful HTTP API。 REST代表 代表性的國家轉移 - soundmonster
我們怎樣才能看到響應xml不是在一行而是格式化? - Vitaly Zdanevich
我想你可以放棄 -X POST 因為這是隱含的 -d。 - benjifisher
如何提供多個標題? - keya
多個標題:curl -H“header2:1”-H“header2:2”...... - Tomáš Kratochvíla


來自stdin的數據: 使用 -d @-。例:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

輸出:

<p>Hello <strong>world</strong>!</p>

121
2018-03-25 19:35



如果你已經在剪貼板中有一個JSON對象,那就太棒了 - Luca Steeb
甚至更好:迴聲“$ message”| curl -H“Content-Type:application / json”-d @ - “$ url” - rzr


curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

是在中找到的例子 捲曲示例手冊

如果以上不起作用,請使用%26作為&符號:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 

65
2017-09-17 15:42





如果要登錄站點,請執行以下操作:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

第一個請求在“headers”文件中保存會話cookie(在成功登錄時提供)。從現在開始,您可以使用該cookie對您通過瀏覽器登錄後通常訪問的網站的任何部分進行身份驗證。


58
2018-03-04 02:21



來自curl的手冊頁的一個註釋:'-c,-cookie-jar選項是存儲cookie的更好方法。 - maxschlepzig


curl -v --data-ascii var=value http://example.com

並且還有更多選項,請檢查 curl --help 欲獲得更多信息。


32
2017-09-17 15:43





如果你很懶,你可以讓google-chrome為你做所有的工作。

  1. 右鍵單擊要提交的表單並選擇 檢查。這將打開DevTools面板。
  2. 選擇 網絡 devtools中的選項卡並打勾 保留日誌 複選框。
  3. 提交表單並使用方法POST找到該條目(右鍵單擊任何列標題並確保 方法 檢查)。
  4. 用POST右鍵單擊該行,然後選擇 複製 > 複製為cURL

chrome devtools: copy as cURL

Chrome會以cURL語法複製所有請求數據。

Chrome使用 --data 'param1=hello&param2=world' 通過使用單個可以使您更具可讀性 -d 要么 -F 每個參數取決於您要發送的POST請求類型,也可以是 application/x-www-form-urlencoded 要么 multipart/form-data 因此。

這將被張貼為 application/x-www-form-urlencoded (用於大多數不包含文件上傳的表單):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

為一個 multipart/form-data POST使用 -F (通常用於包含文件上載的表單,或者字段順序很重要,或者需要多個具有相同名稱的字段的表單):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

User-Agent 通常不需要頭文件,但為了以防萬一我將其拋出。您可以通過創建。來避免必須在每個請求上設置用戶代理 ~/.curlrc 包含例如的文件 User-Agent: "Mozilla/2.2"


17
2017-09-29 08:06