如何通過示例使用 curl 命令 [Download Files]

curl 命令 向網絡服務器傳輸數據或從網絡服務器傳輸數據。 默認情況下,它在所有基於 Linux 的系統中可用。 它通常用於解決 URL 訪問問題和下載文件。 Curl 支持多種協議,包括 HTTP、HTTPS、FTP、FTPS、SFTP 等。如果您沒有明確指定任何協議,它將默認為 HTTP。 Curl 由 libcurl 提供支持,用於所有與傳輸相關的功能。

Curl 提供了許多有用的技巧,例如代理支持、用戶身份驗證、FTP 上傳、HTTP 發布、SSL 連接、cookie、文件傳輸恢復、Metalink 等。

在本教程中,我們將討論 如何使用 curl 命令及其基礎 選項 用例子。

如果你沒有找到 curl 安裝在您的 Linux 系統中,請使用以下命令:

安裝 curl 在 Ubuntu/Debian 上

$ sudo apt install curl

在 CentOS/ 上安裝 CurlFedora

$ sudo yum install curl

如何使用 curl 命令

捲曲語法:

$ curl [options] [URL]

  • 選項 – 的 curl 選項以一個或兩個破折號開頭。
  • URL – 遠程服務器的 URL。

curl 命令後跟網站 URL 顯示源代碼網站到標準輸出。

打印https://的源代碼example。和:

$ curl https://example.com

您可以將 URL 作為輸入傳遞給 curl 命令,並將輸出重定向到文件。

為了 example:

$ curl https://exmaple.com > example.html

下載同名文件

下載一個文件並使用相同的名稱保存, 使用 -O 選項。

為了 example 要下載 Ubuntu 20.04 iso 文件,請鍵入:

$ curl -O https://releases.ubuntu.com/20.04/ubuntu-20.04.2.0-desktop-amd64.iso

輸出:

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
5 2743M 5 156M 0 0 49.9M 0 0:00:54 0:00:03 0:00:51 49.9M

驗證下載的文件:

$ ls
ubuntu-18.04.2-desktop-amd64.iso
$

下載文件 並保存它 自定義名稱, 使用 -o 選項。

$ curl -o ubuntu-20-04.iso https://releases.ubuntu.com/20.04/ubuntu-20.04.2.0-desktop-amd64.iso

要驗證,請使用 ls 命令:

$ls
ubuntu-20-04.iso

下載多個文件

下載多個文件 一次,使用多個 -O 標誌,後跟文件的 URL。

句法:

$ curl -O [URL1] -O [URL2] -O [URL3] ...

為了 example:

$ curl -O localhost/file.pdf -O localhost/file1.pdf

要使用不同的名稱保存多個文件,請使用嵌套的 -o 選項。

為了 example:

$ curl -o file2.pdf localhost/file.pdf -o file3.pdf localhost/file1.pdf

下載有數字序列的文件,輸入:

$ curl ftp://ftp.example.com/file[1-30].jpeg

通過 FTP 下載/上傳

要訪問一個 受保護的 FTP 服務器 與 curl 命令您需要將 -u 標誌與用戶名和密碼一起使用。

以下命令將列出用戶主目錄中的所有文件和目錄。

$ curl -u USERNAME:PASSWORD ftp://ftp.example.com/

要下載文件,請使用:

$ curl -u USERNAME:PASSWORD ftp://ftp.example.com/file.tar.gz

要將文件上傳到 FTP 服務器,請使用 -T 標誌:

$ curl -T newfile.tar.gz -u USERNAME:PASSWORD ftp://ftp.linoxide.com/

注意:如果 FTP 服務器允許匿名登錄,則不需要使用 -u username:password

上傳文件

Curl 使用 -F 選項模擬用戶按下提交按鈕的填寫表單。

為了 example 使用 Content-Type multipart/form-data POST 數據:

$ curl -F @field_name=@path/to/local_file <upload_URL>

恢復中斷的下載

如果一個 下載被中斷 出於某種原因,您可以使用選項 -C – 從停止的位置繼續下載。

$ curl -C - -O https://releases.ubuntu.com/20.04/ubuntu-20.04.2.0-desktop-amd64.iso

輸出:

** Resuming transfer from byte position 2297856
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 1901M 0 9842k 0 0 734k 0 0:44:10 0:00:13 0:43:57 339k

捲曲以獲取 HTTP 標頭

要獲取 HTTP 標頭,請僅使用 -I 選項。 用於 FTP 或 FILE 文件時,僅顯示文件大小和上次修改時間。

為了 example:

$ curl -I redhat.com
HTTP/1.0 301 Moved Permanently
Location: https://www.redhat.com/en
Server: BigIP
Connection: Keep-Alive
Content-Length: 0

捲曲跟隨重定向

有時,您可能會遇到出現“已移動”或“永久移動”等錯誤的 URL。 這通常發生在 網址重定向 到其他一些網址。

為了 example,從輸出 google.com 重定向到 www URL,因此您會收到如下錯誤:

$ curl google.com

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

告訴 curl 要遵循重定向,請使用 -L 選項。

$ curl -L google.com

用例 1:如果您嘗試下載文件的 URL 有任何 301 重定向,您可能無法下載文件。 為了 example, 如果 URL 有 http 到 https 的重定向,則必須使用選項 -L 跟隨重定向並下載。

$ curl -o test.txt -L https://www.test.com

用例 2:檢查遠程服務器支持 http2 使用 -L 後跟 –http2。 為了 example

$ curl -I --http2 -s https://linoxide.com/ | grep HTTP

如果輸出顯示HTTP/2 200,說明遠程服務器支持HTTP/2。

限制最大傳輸速率

限制數據傳輸速率的用法是:

$ curl --limit-rate [value] [URL]

該值可以用字節、k 後綴的千字節、m 後綴的兆字節和 g 後綴的千兆字節表示。

以下命令將下載速度限制為 1mb:

$ curl --limit-rate 1m -O https://releases.ubuntu.com/20.04/ubuntu-20.04.2.0-desktop-amd64.iso

跳過 SSL 證書

默認情況下, curl 驗證它建立的每個 SSL 連接。 有時,由於 SSL/TLS 錯誤或使用自簽名證書或無效證書測試 API 端點,您會遇到下載文件的問題。 在這種情況下,使用 -k 選項跳過 SSL。

$ curl -o -k https://www.test.com

驗證自簽名證書

驗證您的自簽名證書 curl, 使用 –cacert 選項。

curl --cacert myssl.crt -O https://test.com/file.tgz

指定用戶代理字符串

指定用戶代理 發送到 HTTP 服務器的字符串使用 -A 選項。

用例:一些 http 服務器塊 curl 用戶代理下載文件,在這種情況下 curl 允許指定用戶代理。 為了 example:

$ curl -A "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5" -O https://localhost/file1.pdf

指定代理

要使用 指定的 HTTP 代理 下載使用 -x 選項。 如果未指定端口號,則假定為端口 1080。

為了 example 要在端口 8080 上使用特定代理 192.168.35.8 下載文件,請鍵入:

$ curl -x 192.168.35.8:8080 -O https://example.com/01.tar.gz

使用 -U 或 –proxy-user 選項指定身份驗證用戶名和密碼。

為了 example:

$ curl -x 192.168.35.8:8080 -U user:password -O https://example.com/file01.tar.gz

存儲/傳遞 Cookie

寫餅乾 對於訪問資源時下載的文件,使用 –cookie-jar 或 -c 選項後跟文本文件名來存儲它。

為了 example 要將來自 https://www.nytimes.com/ 的 cookie 存儲到名為 cookies.txt 的文件,請使用:

$ curl -c cookies.txt https://www.nytimes.com/index.html -O

你可以告訴 curl 重複使用 cookie 之前通過使用 -b 或 –cookie 選項收到,後跟包含 cookie 或字符串的文件名。 這會將數據作為 cookie 傳遞到 HTTP 服務器。 默認情況下, curl 不使用 cookie 來請求資源。

$ curl -b cookies.txt https://www.nytimes.com

請求的總時間

為了得到 總時間 curl 請求成功使用 -w 選項。

為了 example 傳輸完成後打印總時間以在傳輸完成後下載 ubuntu 20.04 iso 文件。

$ curl -w "%{time_total}n" -o /dev/null -s https://releases.ubuntu.com/20.04/ubuntu-20.04.2.0-desktop-amd64.iso

輸出:

276.044317

本地名稱解析

測試資源的本地版本 example API 端點使用 –resolve 選項。 該開發人員測試用於部署的 API。

$ curl --resolve www.example.com:80:localhost https://www.example.com/

進度表

默認情況下,Curl 在上傳或下載數據時會顯示進度表。 它將指示諸如總大小、收到的百分比和大小、花費的時間、剩餘時間、當前速度等信息。

顯示一個 替代進展 儀表使用 -# 或 –progress-bar。 為了 example:

$ curl -# -O https://releases.ubuntu.com/20.04/ubuntu-20.04.2.0-desktop-amd64.iso
############### 20.9%

要禁用進度表,請使用 –silent 或 -s。

$ curl -O --silent https://releases.ubuntu.com/20.04/ubuntu-20.04.2.0-desktop-amd64.iso

結論

在本教程中,我們學習瞭如何使用 curl 在 Linux 中傳輸數據的命令。 如果您想了解更多關於 curl 參觀 捲曲文檔 頁。 請在下面的評論部分讓我知道您對本教程的想法和建議。

另請閱讀:

  • httpie – Linux 上的 Curl 替代 HTTP 命令行客戶端