Linux經常使用命令08 - curl

curl 是一個命令行實用程序,用於將數據從服務器或傳輸到服務器,該服務器設計用於在沒有用戶交互的狀況下工做。 使用 curl,您可使用支持的協議(包括 HTTP、 HTTPS、 SCP、 SFTP 和 FTP)下載或上傳數據。 curl 提供了許多選項,容許您恢復傳輸、限制帶寬、代理支持、用戶認證等等。vue

下面就介紹常見的用法, 將經過實際例子和最多見的 curl 選項的詳細說明,向您展現如何使用 curl 工具。java

安裝 curl

如今大多數 Linux 發行版都預先安裝了 curl 包。linux

要檢查 curl 包是否已安裝在系統上,請打開控制檯,鍵入 curl,而後按回車鍵。 若是您安裝了 curl,系統將打印 curl: 嘗試‘curl --help’或‘ curl --manual’獲取更多信息。 不然,您將看到相似 curl 命令的內容沒有被找到。
dsjqSugit

若是沒有安裝 curl,您可使用發行版的包管理器輕鬆地安裝它。github

在 Ubuntu 和 Debian 上安裝 curl

sudo apt update
sudo apt install curl

在 CentOS 和 Fedora 上安裝 curl

sudo yum install curl

如何使用 curl

curl 命令的語法以下:macos

curl [options] [URL...]

在其最簡單的形式中,當不使用任何選項調用時,curl 將指定的資源顯示到標準輸出。npm

例如,要檢索示例網站的主頁,你能夠運行:瀏覽器

curl chasays.github.io

eqklbA

該命令將在您的終端窗口中打印示例.com 主頁的源代碼。服務器

若是沒有指定協議,curl 會嘗試猜想您想要使用的協議,它將默認爲 HTTP。cookie

將輸出保存到文件中

若要保存 curl 命令的結果,請使用-o 或-O 選項。

Lowercase -o 使用一個預約義的文件名保存文件,在下面的示例中是 vue-v2.6.10. js:

curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js

大寫 -O 保存文件和它的原始文件名:

curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js

cbHQFb

下載多個文件

要一次下載多個文件,請使用多個 -O 選項,後跟要下載的文件的 URL。

在下面的例子中,咱們正在下載 Arch Linux 和 Debian iso 文件:

curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso  \
     -O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso

恢復下載

您可使用 -C 選項恢復下載。 若是您的鏈接在下載一個大文件期間斷開,並且您能夠繼續前一個文件而不是從頭開始下載,那麼這將很是有用。

例如,若是你正在下載 Ubuntu 18.04 iso 文件,使用如下命令:

curl -O https://updates.cdn-apple.com/2020/macos/061-44388-20200128-3badc52c-6391-412c-86d9-fc2aaf9514e0/macOSUpd10.15.3.dmg

而後你的鏈接忽然斷開,你能夠用如下命令繼續下載:

curl -C - -O https://updates.cdn-apple.com/2020/macos/061-44388-20200128-3badc52c-6391-412c-86d9-fc2aaf9514e0/macOSUpd10.15.3.dmg

AFXvTE

獲取 URL 的 HTTP 頭

Http 頭是冒號分隔的鍵值對,包含用戶代理、內容類型和編碼等信息。 頭文件經過請求或響應在客戶端和服務器之間傳遞。

使用 -I 選項僅獲取指定資源的 HTTP 標頭:

curl -I --http2 https://www.apple.com/

b8dqcw

測試網站是否支援 http/2

要檢查某個特定的 URL 是否支持新的 HTTP/2協議,請使用-i 和 --http2選項獲取 HTTP header:

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

9JSwNl
S 選項告訴 curl 以靜音(quiet)運行,並隱藏進度表和錯誤消息。

若是遠程服務器支持 http/2,curl 打印 http/2.0200:

HTTP/2 200

不然,回覆就是 http/1.1200:

HTTP/1.1 200 OK

若是您使用的是 curl 版本7.47.0或更高版本,則不須要使用 -- http2選項,由於全部 HTTPS 鏈接都默認啓用了 http/2。

遵循重定向

默認狀況下,curl 不遵循 HTTP Location 頭。

若是你嘗試檢索非 www 版本的 google. com,你會注意到,你不但沒有得到頁面的來源,反而會被重定向到 www 版本:

curl baidu.com

選項指示 curl 跟蹤任何重定向,直到它到達最終目的地:
``
curl -L baidu.com
``
nITkGy

更改用戶代理

有時在下載文件時,遠程服務器可能被設置爲阻止 curl User-Agent,或者根據訪問者設備和瀏覽器返回不一樣的內容。

在這種狀況下模擬不一樣的瀏覽器,使用 -a 選項。

例如,要模擬 Firefox 60,你可使用:

curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://baidu.org/

指定最大傳輸速率

--limit-rate 選項容許您限制數據傳輸速率。 該值能夠用字節表示,k 後綴爲千字節,m 後綴爲兆字節,g 後綴爲千字節。

在下面的例子中 curl 將下載 Go 二進制文件,並將下載速度限制在1 mb:

curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

此選項有助於防止 curl 佔用全部可用帶寬。

經過 FTP 傳輸文件

要使用 curl 訪問受保護的 FTP 服務器,請使用-u 選項並指定用戶名和密碼,以下所示:

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.baidu.com/

登陸後,該命令列出用戶主目錄中的全部文件和目錄。

你可使用如下語法從 FTP 服務器下載一個文件:

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz

要將文件上傳到 FTP 服務器,請使用-t 後跟要上傳的文件的名稱:

curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

使用cookies

有時您可能須要使用特定的 cookie 發出 HTTP 請求以訪問遠程資源或調試問題。

默認狀況下,當使用 curl 請求資源時,不會發送或存儲 cookie。

若要將 cookie 發送到服務器,請使用-b 開關,後跟包含 cookie 或字符串的文件名。

例如,下載 oraclejavajdkrpm 文件 JDK-10.0.2 linux-x64 bin。 Rpm 你須要傳遞一個值爲 a 的名爲 oraclericense 的 cookie:

curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm

## 使用代理

支持不一樣類型的代理,包括 HTTP、 HTTPS 和 SOCKS。 若要經過代理服務器傳輸數據,請使用-x (-- proxy)選項,後跟代理 URL。

下面的命令使用代理在192.168.44.1 port 8888上下載指定的資源:

curl -x 192.168.44.1:8888 http://google.com/

若是代理服務器須要身份驗證,請使用-u (-- proxy-user)選項,後跟用戶名和密碼,用冒號分隔(user: password) :

curl -U username:password -x 192.168.44.1:8888 http://google.com/

小結

curl 是一個命令行工具,它容許您從遠程主機或向遠程主機傳輸數據。 它對於故障排除、下載文件等很是有用。
我只是作了一些簡單的實例,可是演示了最經常使用的 curl 選項,這些示例旨在幫助您理解 curl 命令的工做原理。
本篇文章由一文多發平臺ArtiPub自動發佈

相關文章
相關標籤/搜索