如果您正在尋找快速答案,該curl -O命令可讓您使用curl 命令行實用程序下載文件。當然,關于使用 curl 下載文件,要學習的不僅僅是-O參數。
這里我們將提供多個 curl 下載命令的示例,您可以使用這些命令來滿足不同的要求。如果您是 curl 新手,我們建議您完整閱讀本文。如果您熟悉 curl 但只需要快速復習一下,請隨時跳到特定部分。
什么是curl?
curl 是一個開源命令行實用程序,用于使用 URL 語法和廣泛的網絡協議(包括 HTTP(S)、FTP、SFTP、LDAP(S) 和 SMTP)傳輸數據。curl 命令行實用程序是包含libcurl 庫的 cURL(“URL 客戶端”)項目的一部分。
由于 curl 通常“正常工作”,具有高度可移植性并默認安裝在許多系統上,并且是 API 文檔中的事實標準,因此它是開發人員和 DevOps 工程師中的流行工具。
先決條件
如果您運行的是現代 Linux 操作系統,那么您可能擁有需要遵循的一切。可以肯定的是,這里有先決條件:
- curl - curl 默認安裝在大多數流行的 *nix 操作系統上,包括 macOS。它也適用于現代 Windows 操作系統。curl -V您可以通過從終端運行命令來檢查是否安裝了 curl 。輸出應類似于:
如果您是 Linux 用戶并且沒有安裝 curl,您可以使用操作系統的默認包管理器(例如 apt、yum 或 zypper)下載它。這里有各種其他操作系統的 curl 下載鏈接。
- 連接到服務器以從中下載文件 - 我們將為大多數示例命令使用 HTTPS 連接,我們建議您也這樣做。但是,curl 支持超過兩打協議。只要您有權訪問服務器以從至少支持 curl 之一的協議下載文件,就可以按照示例命令進行操作。請務必將我們的示例鏈接(例如http://speedtest.lt.cherryservers.com/test-100mb)替換為您要下載的文件的鏈接。
?專業提示:?您可以組合 curl 參數。在大多數示例中,我們將堅持在 curl 命令中使用一個或兩個參數。但是,curl 也支持組合參數。例如,如果要下載文件 (-O)、遵循 301 重定向 (-L) 并允許不安全的 SSL 證書 (-k),則可以使用 curl -OLk。
下載文件
使用 curl 下載文件的基本語法是:
curl -O <protocol>://<site>/<path/to/file>
例如,要使用 HTTPS 從 http://speedtest.lt.cherryservers.com/test-1000mb 下載 1GB 的虛擬日期,請使用以下命令:
curl -O http://speedtest.lt.cherryservers.com/test-100mb
稱為curl progress meter的輸出類似于以下內容:
默認情況下,您下載的文件保存在您當前的工作目錄中。下面是一個端到端的可視化示例。
用不同的名稱保存下載的文件
該curl -O命令使用來自遠程服務器的文件名將文件本地保存在當前工作目錄中。您可以使用指定不同的本地文件名和下載位置curl -o。基本語法是:
curl -o </path/to/save/location/filename> <protocol>://<site>/<path/to/file>
要在本地 /tmp 目錄中將 http://speedtest.lt.cherryservers.com/test-1000mb 保存為 mydownload.zip,請使用以下命令:
curl -o /tmp/mydownload.zip http://speedtest.lt.cherryservers.com/test-1000mb
指定非默認端口
默認情況下,curl 使用協議的默認端口(80 用于 HTTP,443 用于 HTTPS,21 用于 FTP,等等)。要指定非默認端口,請附加:[port_number]到遠程服務器的域名或 IP 地址的末尾。
基本語法是:
curl -O <protocol>://<site>:[port_number]/<path/to/file>
使用我們的http://speedtest.lt.cherryservers.com/test-1000mb示例,如果 HTTP 服務器在端口 4040 上運行,您將使用此命令:
curl -O http://speedtest.lt.cherryservers.com:4040/test-1000mb
重新啟動中斷的下載
在某些情況下,例如當您通過較差的網絡連接下載大文件時,文件下載會中斷。-C - 選項允許您恢復中斷的下載。基本語法是:
curl -C - -o <local_filename> <protocol>://<site>/<path/to/file>
例如,要在本地下載為 /tmp/mydownload.zip 時恢復 example.zip 的 HTTPS 下載,請使用以下命令:
curl -C - -o /tmp/mydownload.zip http://speedtest.lt.cherryservers.com/test-1000mb
在顯示 curl 進度表之前,輸出將包含類似于以下內容的文本:
一條命令下載多個文件
您可以在單個 curl 命令中指定多個 URL,以便在一個命令中下載多個文件。
基本語法是:
curl -O <protocol>://<site_1>/<path/to/file_1> -O <protocol>://<site_2>/<path/to/file_2>
例如,要下載 http://speedtest.lt.cherryservers.com/test-1000mb 和 http://speedtest.lt.cherryservers.com/test-100mb 使用此命令:
curl -O http://speedtest.lt.cherryservers.com/test-1000mb -O http://speedtest.lt.cherryservers.com/test-100mb
curl 進度表將顯示每個下載的統計信息。對于兩個 URL,輸出將類似于以下內容:
如果您有很長的 URL 列表,您可以將它們添加到一個文本文件中,然后使用xargs.?為了演示,假設我們有一個curlsites.txt文件,其中包含我們的 URL,將每個 URL 放在一個新行上:
http://speedtest.lt.cherryservers.com/test-1000mb
http://speedtest.lt.cherryservers.com/test-100mb
我們現在可以使用xargs命令curl和我們的curlsites.txt文件作為輸入來下載每個文件:
xargs -n 1 curl -O < curlsites.txt
在 Pralel 中下載多個文件
通常,curl 一個一個地處理 URL,上面的 xargs 示例也是如此。但是,您可以將-P參數添加到 xargs 以并行下載多個文件。例如,此命令將并行運行兩個 curl 下載。
xargs -P 2 -n 1 curl -O < curlsites.txt
有關 xargs 及其選項的更多詳細信息,請查看xargs 手冊頁。
使用速率限制
速率限制讓您可以為 curl 請求指定最大傳輸速率。將速率限制應用于 curl 下載請求的基本語法是:
curl --limit-rate <speed> -O <protocol>://<site>/<path/to/file>
默認情況下,<speed>以每秒字節數為單位。您可以附加以下后綴之一來更改度量單位:
- K或k= 千字節
- M或m= 兆字節
- G或g= 千兆字節
例如,要在我們的示例下載中設置每秒 1000 字節的速率限制,我們可以使用以下命令:
curl --limit-rate 1000 -O http://speedtest.lt.cherryservers.com/test-100mb
或者這個命令:
curl --limit-rate 1k -O http://speedtest.lt.cherryservers.com/test-100mb
要限制為每秒 100 兆字節:
curl --limit-rate 100m -O http://speedtest.lt.cherryservers.com/test-100mb
請注意,curl 會嘗試平均傳輸速度以不超過該<speed>值。當您第一次使用該--limit-rate選項運行 curl 時,您可能會看到速度高于指定值,<speed>但它們應該會很快趨于平穩。
自動中止慢速下載
如果您下載文件的服務器速度太慢,您可能希望自動中止連接。您可以使用-Y(or?--speed-limit) 和-y(or?--speed-time) 選項。
-Y(或--speed-limit)選項定義速度(以字節/秒為單位)。(?-yor?--speed-time) 選項指定以秒為單位的時間量。-Y如果下載速度在 定義的時間內低于定義的速度-y,curl 將中止下載。-Y如果-y未指定,則默認時間為 30 秒。下面是三個示例來演示。
- 如果速度低于 ~100 KB/s(千字節每秒)持續 10 秒,則中止下載:
curl -O -Y 100000 -y 10 http://speedtest.lt.cherryservers.com/test-1000mb - 如果速度低于 ~100 MB/s(每秒兆字節)達 15 秒,則中止下載:
curl -O -Y 100000000 -y 15 http://speedtest.lt.cherryservers.com/test-1000mb - 如果速度低于 1KB/s 持續 30 秒,則中止下載(默認 30 秒,因此無需指定 -y):
curl -O -Y 1000 http://speedtest.lt.cherryservers.com/test-1000mb
如果 curl 由于傳輸速度限制而中止下載,它將打印類似于以下內容的錯誤消息:
顯示下載狀態欄
--progress-bar您可以使 curl 顯示帶參數的進度條,而不是標準進度條。進度條將以百分比形式顯示下載進度,并在終端上顯示 # 符號。
您可以將該參數附加--progress-bar到大多數 curl 命令。以下是帶參數的基本語法 HTTPS 下載命令--progress-bar:
curl -O <protocol>://<site>/<path/to/file> --progress-bar
進度條輸出類似于:
使 Curl 遵循 301 重定向
從 HTTP(S) 服務器下載文件時,301 重定向很常見。要讓 curl 遵循 301 重定向,請使用 -L 參數。
下面是帶有 -L 參數的 301 重定向的基本語法示例:
curl -OL <protocol>://<site>/<path/to/file>
curl -L -o </path/to/save/location/filename> <protocol>://<site>/<path/to/file>
使用基本身份驗證
雖然像OAuth 2.0這樣的現代身份驗證形式在現代 HTTP 服務器上更為常見,但在某些情況下,可以使用需要用戶名和密碼的基本身份驗證來保護下載。例如,FTP 下載是基本身份驗證的典型用例。-u您可以使用參數提供用于基本身份驗證的用戶名和密碼。
curl 下載請求的基本身份驗證的基本語法是:
curl -u <username>:<password> -O <protocol>://<site>/<path/to/file>
抑制卷曲輸出
您可以使用參數抑制 curl 的輸出-s。使用 curl 靜默下載文件的基本語法是:
curl -Os <protocol>://<site>/<path/to/file>
此命令就像 -O 一樣下載文件,但不會將進度或統計信息打印到標準輸出。
允許不安全的 SSL/TLS 證書
在某些情況下,您可能希望通過 HTTPS 下載文件,即使服務器具有無效證書或自簽名證書也是如此。您可以使用 -k 選項讓 curl 在不驗證 TLS/SSL 證書的情況下繼續。請注意,此行為不安全!
以下是允許不安全的 SSL 證書進行 curl 下載的基本語法:
curl -Ok https://<site>/<path/to/file>
如果您有意連接到具有不安全 TLS/SSL 證書的站點,-k 參數可以幫助解決以下錯誤:
我們還建議訪問錯誤消息中提到的官方頁面,以獲取有關 curl 和 TLS/SSL 的更多詳細信息。
使用 FTP 和 SFTP 下載文件
除了 HTTP(S) 之外,FTP 和 SFTP 也是 curl 可用于下載文件的流行協議。您可以通過在命令中指定這些協議來使用 FTP 或 SFTP,就像我們在其他示例中使用 HTTPS 一樣。
由于 FTP 和 SFTP 服務器通常需要用戶名和密碼,因此我們將在示例中使用 -u 參數。
使用 curl 進行 FTP 下載的基本語法:
curl -u <username>:<password> -O ftp://<site>/<path/to/file>
對于 SFTP:
curl -u <username>:<password> -O sftp://<site>/<path/to/file>