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 的引號:單引號之內變數不會展開,雙引號之內則會。

使用方法

  1. 指明方法與網址 取用選 GET,送出選 POST。
  2. 添上標頭 若送的是 JSON,切莫忘了 Content-Type: application/json。
  3. 寫下請求主體 附上請求主體後,未指明方法時便自動成為 POST。
  4. 複製指令去執行 貼進終端機即可,別無他求。

用好本工具的小技巧

  • 生成的命令可以直接貼上到 終端、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
顯示回應標頭,以及顯示互動的細節。二者在事情不靈時都值回票價。

常見問題

不會。本工具僅用於拼裝命令字串,不會發送任何真實的 HTTP 請求。只有當你將生成的命令複製到終端並自行執行時,請求才會真正發出。如果想實際傳送請求並檢視結果,請使用姊妹工具"REST API 測試器"。

可以。只需將在 Postman 中構建的請求方法、URL、請求頭和請求體輸入本工具,即可生成可直接複製貼上的 curl 命令,非常適合寫入 CI/CD 指令碼或文件。

技術上可行,但需要注意。當 curl 在省略 -X 選項的情況下使用 -d(請求體)時,會自動以 POST 方式傳送。如果確實需要在保持 GET 的同時傳送請求體,可在生成的命令後手動新增 -X GET。

不會。你輸入的所有認證資訊都僅在瀏覽器內由 JavaScript 處理,絕不會發送到 toolbase.cc 的伺服器。只有當你在自己的環境中執行生成的命令時,才會由該環境直接發往目標 API。

"-k(--insecure)"用於跳過 SSL 證書驗證,僅應作為使用自簽名證書的本地開發環境的臨時應對方案。若在生產環境或涉及敏感資訊的通訊中使用,會帶來中間人攻擊的風險,因此不建議使用。
工具君

閒話 ― 為什麼 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 環境中,只需一條命令即可當場執行並分享結果,這種極高的可復現性是其他工具難以取代的。