curl 命令生成器
在表單中指定 HTTP 方法、URL、請求頭、請求體和認證方式,即可生成可直接複製執行的 curl 命令。由於並不會真正傳送請求,因此不受 CORS 限制。
常用 curl 選項一覽
| 選項 | 說明 |
|---|---|
| -X, --request <method> | 指定 HTTP 方法(GET、POST、PUT、PATCH、DELETE 等)。省略時,無請求體預設為 GET,有請求體預設為 POST。 |
| -H, --header <header> | 新增一條請求頭。如需新增多條,可重複使用 -H。 |
| -d, --data <data> | 傳送請求體。若未指定 -X,會自動以 POST、Content-Type: application/x-www-form-urlencoded 的方式傳送。 |
| -u, --user <user:password> | 以 "user:password" 格式指定 Basic 認證的使用者名稱和密碼。 |
| -k, --insecure | 跳過 SSL 證書驗證。適用於使用自簽名證書的開發環境,生產環境不建議使用。 |
| -L, --location | 當伺服器返回 3xx 重定向時,自動跟隨 Location 頭指示的目標地址。 |
| -v, --verbose | 在標準錯誤輸出中顯示包含請求和響應頭在內的詳細通訊過程,便於除錯。 |
| --compressed | 附加 Accept-Encoding 頭,請求並自動解壓 gzip 等壓縮格式的響應。 |
| -o, --output <file> | 將響應體儲存到指定檔案,而不是輸出到標準輸出。 |
| -F, --form <name=content> | 以 multipart/form-data 格式傳送表單資料或檔案。檔案上傳時指定 "@檔案路徑"。 |
由表單拼出 curl 指令
在表單裡指明方法、網址、標頭、請求主體與認證方式,便得出一條可直接貼進終端機執行的 curl 指令。本工具並不真的發出請求,故不受瀏覽器的跨來源限制——即便是網頁無從呼叫的 API,指令照樣拼得出來。
在 curl 上絆住人的,是方法與請求主體之間的干係。 以 -d 附上請求主體,方法便自動成了 POST,縱使您一字未寫。 於是想發 PUT 或 PATCH 卻只給了 -d,射出去的便是一個意料之外的 POST。另一樁常見之誤,是明明送的是 JSON 卻忘了寫 Content-Type: application/json;curl 於是按 application/x-www-form-urlencoded 送出,伺服端便壓根不把它當 JSON 來讀。 把產生的指令貼進終端機時,也請留心 shell 的引號:單引號之內變數不會展開,雙引號之內則會。
使用方法
- 指明方法與網址 取用選 GET,送出選 POST。
-
添上標頭
若送的是 JSON,切莫忘了
Content-Type: application/json。 - 寫下請求主體 附上請求主體後,未指明方法時便自動成為 POST。
- 複製指令去執行 貼進終端機即可,別無他求。
用好本工具的小技巧
- 生成的命令可以直接貼上到 終端、Shell 指令碼或 CI/CD 配置檔案 中執行,所有值均已用單引號轉義完畢。
- 如果方法仍為 GET 卻輸入了請求體,會顯示警告。因為 curl 在省略
-X而使用-d時會自動以 POST 方式傳送,此提示可幫助你避免意料之外的行為。 - 勾選"自動新增 Content-Type: application/json"後,會自動補上呼叫 JSON API 時容易遺漏的 Content-Type 頭。
- Basic 認證和 Bearer 令牌的輸入值均僅在瀏覽器內處理,絕不會發送到任何伺服器。
- 生成的
-k(跳過證書驗證)只是針對自簽名證書本地開發環境的臨時應對方案,請勿在生產環境的 API 中長期使用。
這些情境會用到
試探 API 的行為
網頁呼叫不動的 API,用 curl 仍試得出來,跨來源攔不住它。
把指令寫進操作手冊
可把一次請求的內容,記成人人都能重現的樣子。
分享故障的重現步驟
遞給對方一條指令去跑,所得的重現受環境差異的影響小得多。
學習 curl 的選項
可以看出表單裡的每一項各自變成了哪個選項。
curl 的術語
- -X
- 明確指明方法。因
-d即便不寫也會成為 POST,故 PUT 與 DELETE 時非它不可。 - -H
- 添一條標頭。寫上數次,便添上數條。
- -d
- 指明請求主體。寫了它,方法便成為 POST,預設的內容類型則成了表單編碼。
- -u
- 指明基本認證的使用者名稱與密碼,寫作
使用者名稱:密碼。 - Bearer 權杖
- 以
Authorization: Bearer ...送出憑據的方式。極多 API 都採此形。 - -i 與 -v
- 顯示回應標頭,以及顯示互動的細節。二者在事情不靈時都值回票價。
常見問題
-X 選項的情況下使用 -d(請求體)時,會自動以 POST 方式傳送。如果確實需要在保持 GET 的同時傳送請求體,可在生成的命令後手動新增 -X GET。
閒話 ― 為什麼 curl 是"人人都在用卻幾乎無人知曉"的工具
curl 是瑞典工程師丹尼爾·斯坦伯格(Daniel Stenberg)於 1996 年開發的一款通過 URL 傳輸資料的命令列工具。它最初源於為 IRC 聊天機器人獲取匯率資訊的一個小指令碼,此後逐漸發展成支援 HTTP、FTP、SMTP 等 25 種以上協議的龐大專案。
curl 被認為是全球使用最廣泛的軟體之一。智慧手機、汽車、家電、遊戲機乃至航天器(NASA 的火星探測任務中也有使用記錄)等幾乎所有聯網裝置內部都嵌入了它,據估計其安裝量高達數百億臺規模。儘管普及程度如此之高,它在開發者以外的人群中卻幾乎無人知曉,是"幕後功臣"的典型代表。
2017 年,斯坦伯格憑藉 curl 獲得瑞典歷史最悠久的工程獎項——波爾海姆獎(Polhem Prize)。他至今仍是 curl 專案的核心維護者,二十多年來一直謹慎地推進開發,以避免破壞向後相容性而著稱。
即便在 Postman 等圖形化工具普及的今天,curl 命令依然被廣泛用於 README、官方文件和 API 除錯步驟中。原因很簡單:curl 無需安裝,幾乎預裝在所有 Linux 和 macOS 環境中,只需一條命令即可當場執行並分享結果,這種極高的可復現性是其他工具難以取代的。