curl 的 30 個實用用法:從下載到 API 測試 文章首圖

curl 的 30 個實用用法:從下載到 API 測試

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 參數,你可以輕鬆切換到 POSTPUTDELETE 等方法。對於 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'

常見問題 / 注意事項

  1. URL 編碼問題:當 URL 中包含特殊字元(如空格、中文)時,必須先進行 URL 編碼,否則 curl 可能會無法正確解析或引發伺服器錯誤。建議使用 jq 或其他工具預先處理參數。
  2. HTTPS 憑證驗證:在腳本自動化中,若忽略憑證驗證(使用 -k),可能會遭受中間人攻擊(MITM)。請務必確認伺服器憑證的有效性,或在受信任的環境中操作。

小結

curl 是一個功能龐大且靈活的工具,從簡單的檔案下載到複雜的 API 自動化測試,它都能勝任。本文介紹的用法僅是冰山一角,建議讀者多嘗試 -v 參數來觀察請求細節,這將有助於更深刻理解 HTTP 協定的運作方式。掌握這些實用技巧,你將能更自信地面對各種網路互動場景。