curl 使用有序的命令列傳輸 URL:選項用於設定一個或多個傳輸,而每個 URL 都會啟動一次傳輸。它支援多種通訊協定;以下範例使用 HTTP,因為其要求與回應控制方式具有普遍性。
有意建構要求 #
使用 --request、--header 和 --data 明確宣告要求。除非指定其他方法,否則 --data 會選擇 POST。--data-binary @file 會保留檔案的位元組,而 --data @file 具有表單導向的行為。
curl --fail-with-body --show-error --silent \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $token" \
--data-binary @request.json \
--output response.json \
https://api.example.invalid/v1/jobs在可能的情況下,不要讓認證資訊出現在命令歷史中:使用受限的設定檔、認證資訊輔助程式,或由服務支援的身分驗證機制讀取的環境變數。在某些系統上,-u user:password 可能會使密碼暴露在程序清單中。
-L 會跟隨重新導向。當方法或認證資訊不得傳送到其他來源時,應限制其使用範圍;在自動化之前,使用 --verbose 檢查重新導向行為。
多次傳輸與 URL glob #
curl 區分全域選項與每次傳輸的選項。--verbose 等全域選項會在 --next 之後繼續生效;--header、--request 和 --output 等區域選項會在 --next 開始新操作時重設。不使用 --next 時,區域選項會套用至後續每個 URL,直到被修改,因此每個要求都必須明確指定有意使用的輸出與標頭集合。
curl --output first.json https://example.invalid/one \
--next --header 'Accept: text/plain' \
--output second.txt https://example.invalid/two為防止 shell 展開,請使用引號包圍 URL glob 語法。curl 會展開 [] 範圍和 {} 清單;--output 中的 #1、#2 以及後續佔位符會參照相符的 glob 元件。
curl 'https://example.invalid/page[1-3].json' --output 'page-#1.json'當字面上的方括號或大括號屬於 URL 時,使用 --globoff。
診斷傳輸路徑 #
使用 --verbose 取得要求、回應、代理伺服器和 TLS 協商的詳細資訊。使用 --write-out 記錄穩定的計時與狀態資料,而無需解析面向使用者的輸出。
curl --silent --show-error --output /dev/null \
--write-out 'http=%{response_code} dns=%{time_namelookup} connect=%{time_connect} total=%{time_total}\n' \
https://example.invalid/--resolve host:port:address 會在保留 URL 主機名稱與 TLS SNI 的同時測試指定位址。--connect-to 以更通用的方式重新導向連線。--proxy 選取代理伺服器,--noproxy 將主機排除在代理伺服器的使用範圍之外。不要使用 --insecure 修復憑證錯誤;應修正 URL、信任鏈、主機名稱或本機 CA 設定。
可重現地擷取結果 #
--fail-with-body 會在保留錯誤回應的同時,讓 HTTP 狀態錯誤以非零狀態結束。請檢查 curl 的結束狀態,因為 TCP 交換成功並不代表 HTTP 要求成功。僅對適合重複執行的傳輸使用 --retry:重試具冪等性的 GET 與重複執行付款用的 POST 並不相同。
擷取成品時,應分別寫入標頭和本文,固定完整 URL,並儲存計時中繼資料:
curl --fail --show-error --location \
--dump-header artifact.headers \
--output artifact.tar.xz \
--write-out '%{url_effective} %{response_code}\n' \
https://downloads.example.invalid/tool-1.2.3.tar.xz
sha256sum artifact.tar.xz驗證已發佈的校驗和或簽章;在不受信任的下載之後產生的校驗和只能記錄實際接收的位元組。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)