curl 的 30 個實用用法:從下載到 API 測試
前言
在 Linux 系統管理與開發領域中,curl 無疑是最強大的工具之一。它不僅僅是用來下載檔案的指令,更是開發者進行 API 測試、除錯網路連線以及自動化腳本編寫的神兵利器。儘管名字來源於 "Client for URLs",但它的功能遠超想像。
本文將精選 30 個 curl 的實用用法,涵蓋基礎下載、HTTP 標頭操作、API 互動以及進階除錯技巧。無論你是系統管理員還是全端開發者,掌握這些技巧都能大幅提升你的工作效率。讓我們直接進入實戰範例。
基礎下載與進度管理
最常見的用法自然是下載檔案。使用 -O 參數可以將遠端檔案以原始名稱儲存到當前目錄,而 -o 則允許你自訂檔案名稱。
# 下載檔案並保留原始名稱
curl -O https://example.com/largefile.zip
# 下載檔案並重新命名為 backup.zip
curl -o backup.zip https://example.com/largefile.zip
# 顯示下載進度條
curl -# -O https://example.com/largefile.zip
若需下載多個檔案,可以使用 -O 搭配 URL 清單,或者直接使用 -J 參數讓 curl 自動根據 HTTP 標頭中的 Content-Disposition 來決定儲存名稱,這在處理動態生成的檔案時非常有用。
HTTP 標頭與請求方法控制
curl 預設使用 GET 方法,但透過 -X 參數,你可以輕鬆切換到 POST、PUT、DELETE 等方法。對於 API 開發者來說,檢查回應標頭(Response Headers)是除錯的關鍵。
# 僅顯示 HTTP 標頭,不顯示實體內容
curl -I https://api.example.com/status
# 發送 POST 請求並帶入 JSON 資料
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Alice", "role": "admin"}'
# 模擬瀏覽器 User-Agent
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://example.com
使用 -v(verbose)參數可以顯示完整的請求與回應過程,包括 DNS 解析、TCP 連線建立以及 TLS 握手細節,這對於排查連線問題至關重要。
# 詳細模式:顯示所有網路活動
curl -v https://example.com
身份驗證與安全設定
許多 API 需要身份驗證。curl 支援多種驗證方式,包括基本驗證(Basic Auth)、Bearer Token 以及憑證驗證。
# 使用基本驗證
curl -u username:password https://api.example.com/secure-data
# 使用 Bearer Token
curl -H "Authorization: Bearer <your_token>" https://api.example.com/user/profile
# 使用客戶端憑證進行雙向 SSL 驗證
curl --cert client.crt --key client.key --cacert ca.crt https://secure.example.com
此外,若遇到憑證過期或自簽憑證的測試環境,可以使用 -k(或 --insecure)忽略憑證驗證警告(請務必在生產環境謹慎使用)。
進階技巧與除錯
curl 提供強大的重試機制與條件下載功能。例如,-z 參數可根據檔案修改時間決定是否下載,節省頻寬;--retry 則能在連線失敗時自動重試。
# 若本地檔案比遠端新,則不下載
curl -z local_file.zip https://example.com/remote_file.zip
# 失敗時自動重試 3 次,每次間隔 2 秒
curl --retry 3 --retry-delay 2 https://unstable-api.com/data
# 將回應內容儲存到變數中(Shell 內嵌用法)
response=$(curl -s https://api.example.com/data)
echo "$response" | jq '.name'
常見問題 / 注意事項
- URL 編碼問題:當 URL 中包含特殊字元(如空格、中文)時,必須先進行 URL 編碼,否則 curl 可能會無法正確解析或引發伺服器錯誤。建議使用
jq或其他工具預先處理參數。 - HTTPS 憑證驗證:在腳本自動化中,若忽略憑證驗證(使用
-k),可能會遭受中間人攻擊(MITM)。請務必確認伺服器憑證的有效性,或在受信任的環境中操作。
小結
curl 是一個功能龐大且靈活的工具,從簡單的檔案下載到複雜的 API 自動化測試,它都能勝任。本文介紹的用法僅是冰山一角,建議讀者多嘗試 -v 參數來觀察請求細節,這將有助於更深刻理解 HTTP 協定的運作方式。掌握這些實用技巧,你將能更自信地面對各種網路互動場景。