使用 curl
和 wget
下載文件
1. 認識 curl
有沒有碰過這樣的情況:在面試時,被要求透過終端下載一個檔案,但你愣住了,因為忘記怎麼操作?今天我們來學習如何使用 curl
和 wget
,它們可是處理網路數據的好幫手。
這些工具可以下載網頁、下載檔案、發送 HTTP 請求、操作 API,甚至執行自動化腳本。我們會詳細探討它們的功能、優勢以及典型使用場景。
curl
是個命令列工具,用來透過網路協議傳送數據。它的強大之處在於靈活性:支援超過 20 種協議(HTTP, HTTPS, FTP, SCP, SMTP 等)。開發者覺得這是一把「瑞士刀」,用於處理網路相關的問題。
curl
的基本語法
curl [選項] URL
簡單來說,輸入 curl
命令,加上地址,然後看結果就好。現在來了解一下具體操作。
下載網頁
假設你想下載 Google 的首頁,這麼做就行:
curl http://www.google.com
你會在螢幕上看到該頁面的 HTML 代碼。如果你希望研究網站結構,或者自動化跟網站有關的操作,這功能特別有用。
將內容保存到檔案
如果不希望整個文本流占據螢幕,可以將結果保存到檔案:
curl -o google.html http://www.google.com
使用 -o
(output)標誌告訴 curl
,我們希望將輸出結果導入檔案。現在頁面的 HTML 代碼已經保存到 google.html
。想跟朋友開玩笑的話,可以把檔案給他們,然後說自己下載了「整個網路」。
下載檔案
假設你需要下載某個檔案(例如某個 .zip
)。curl
在這裡特別便利:
curl -O http://example.com/file.zip
和 -o
不同,-O
標誌會使用 URL 中的原始檔案名稱來保存檔案。這對於從同一來源下載多個檔案時特別有用。
HTTP 驗證
有時候,訪問某個檔案或 API 資源需要登入帳號密碼。這時,可以用 curl
加上 -u
標誌:
curl -u username:password http://example.com/private-data
這功能對於操作像 GitHub 或 Docker Registry 這類的受保護 API 特別有用。
透過 API 進行下載
curl
最酷的功能之一就是操作 API。假設你需要向伺服器發送請求,並獲取 JSON 格式的回應數據:
curl -X GET "https://api.exchangerate-api.com/v4/latest/USD"
這裡的 -X
標誌指定了 HTTP 請求方法(GET, POST, DELETE 等)。這對於整合外部服務進行自動化操作,實在是個寶藏工具。
2. 什麼是 wget
?
如果 curl
是瑞士刀,那麼 wget
就是推土機。它的主要任務就是下載檔案。與 curl
的主要區別在於,wget
專為可靠地下載大型檔案而設計,並且支援下載續傳功能,在網路連線不穩的情況下非常方便。
基本的 wget
語法
wget [參數] URL
簡單下載檔案
wget http://example.com/file.zip
這個指令會下載檔案並用原始名稱儲存在當前目錄。簡單有效。
用另一個名稱儲存
如果你不喜歡檔案的原名稱,可以自行設定名稱:
wget -O newfile.zip http://example.com/file.zip
下載續傳
假設你在下載一個很大的檔案,但連線中斷。不用擔心,只需使用 -c
(continue) 參數:
wget -c http://example.com/largefile.iso
wget
會從中斷的地方繼續下載。而且即使幾天後再試,只要伺服器支援這種模式,依然有效。
下載整個網站
沒錯,使用 wget
能下載整個網站(或它的副本)。只需使用 --mirror
參數:
wget --mirror http://example.com
這個指令會以保存目錄結構的方式下載網站。現在你就有一個網站的「鏡像」,可以在離線模式使用了。
3. 比較 curl
和 wget
功能 | curl | wget |
---|---|---|
支援大量協議 | 是 | 僅支援 HTTP/HTTPS 和 FTP |
自動續傳下載 | 否(可以用腳本實現) | 是 |
操作 API | 是 | 否 |
檔案管理的便利性 | 中等 | 非常好 |
下載整個網站 | 否 | 是 |
總的來說,如果你需要操作 API 或執行一些特定的任務,使用 curl
。但如果你只是想下載檔案,wget
是更好的選擇。
4. 實際應用
下載與處理文件
結合 wget
和我們的文本文字處理技能:
wget -O data.txt http://example.com/data.txt
cat data.txt | grep "keyword" | awk '{print $2, $4}'
這裡,我們下載了一個文件,根據關鍵字篩選出行,然後提取了所需的列。
與 API 的交互
用 curl
下載匯率數據,並找到所需的貨幣:
curl -s "https://api.exchangerate-api.com/v4/latest/USD" | grep "EUR"
如果你想建立一套自動化的貨幣轉換系統,這會很有用。
更新自動化
想像一下,每天都需要下載文件更新。以下是簡單的腳本範例:
#!/bin/bash
wget -O updates.zip http://example.com/daily-updates.zip
unzip -o updates.zip -d /path/to/updates
保存腳本並將其添加到 cron
。現在它會自動執行喔——是不是挺方便的?
5. 常見錯誤和特性
錯誤 403 (Forbidden):
此錯誤出現時通常是因為伺服器需要額外的標頭(例如 User-Agent)。可以這樣修復:
curl -A "Mozilla/5.0" http://example.com
重定向:
如果伺服器將你重定向到其他 URL,請在 curl
中加入參數 -L
:
curl -L http://example.com
SSL 錯誤:
有時候 wget
或 curl
可能會報告 SSL 問題。可以關閉憑證檢查 (但這樣不安全!):
wget --no-check-certificate https://example.com
curl -k https://example.com
有了這套強大工具,你已準備好在終端中征服網路了。現在沒有任何文件或 API 能逃過你的掌握——是時候下載、處理並自動化啦!
GO TO FULL VERSION