Linux curl/wget 下載檔案與發送網頁請求
在 Linux 上想要下載網路上的圖片或軟體包,沒有瀏覽器怎麼辦?
我們用 wget 或 curl。
wget:單純好用的下載器
wget 的用途很專一,就是下載檔案。它的特色是穩定,支援續傳。
1. 下載檔案
wget https://example.com/file.zip
2. 下載並另存新檔 (-O)
注意是大寫 O (Output)。
wget -O new_name.zip https://example.com/file.zip
3. 背景下載 (-b)
檔案很大要抓很久?用 -b 讓它在背景跑。
wget -b https://example.com/big_iso_file.iso
4. 斷點續傳 (-c)
下載到一半網路斷線?別擔心,加上 -c (Continue) 就可以從中斷的地方繼續下載。
wget -c https://example.com/big_file.zip
curl:開發者的瑞士刀
curl (Client URL) 不只能下載檔案,更常用來測試網頁回應、發送 API 請求、檢查 Header。
1. 顯示網頁原始碼 (GET)
直接把網頁內容吐到螢幕上(stdout)。
curl https://google.com
2. 下載檔案因為 curl 預設是輸出到螢幕,要儲存成檔案必須用重導向 > 或 -o (小寫)。
curl https://example.com/file.zip > file.zip
# 或者
curl -o file.zip https://example.com/file.zip
3. 檢查 Response Header (-I)
只想看 HTTP 狀態碼 (200, 404, 500) 或 Server 資訊,不想看整個網頁。
curl -I https://google.com
4. 測試 API (POST/PUT/DELETE)
對於後端工程師來說,curl 用來 Debug API 超方便。
# 發送 POST 請求與 JSON 資料
curl -X POST -H "Content-Type: application/json" -d '{"name":"miko"}' https://api.example.com/users
5. 其他實用參數
-L(Follow Redirects): 如果網址有 301/302 跳轉,curl 預設不會跟過去。加上-L它就會乖乖跟著跳轉。-v(Verbose): 顯示詳細的連線過程、Handshake、Request/Response Header。除錯神器。-u user:password: HTTP Basic Authentication 驗證。
處理 JSON 回傳值 (搭配 jq)
在呼叫 API 時,回傳通常是擠成一團的 JSON 字串,很難閱讀。
Linux 有一個超強大的工具叫 jq (需要額外安裝:sudo apt install jq),可以用來格式化與撈取 JSON 資料。
1. 格式化輸出 (Pretty Print)
讓 JSON 變得排版整齊、好讀。
curl https://api.github.com/users/octocat | jq
2. 撈取特定欄位
假設 API 回傳 {"name": "Miko", "id": 123},我只想要 name。
curl https://api.example.com/user/1 | jq '.name'
# 輸出: "Miko"
3. 取出原始字串 (不帶引號)
預設 jq 會輸出帶有雙引號的字串 (JSON 格式)。如果你是要拿來給 Shell Script 用,通常不想要引號。
curl https://api.example.com/user/1 | jq -r '.name'
# 輸出: Miko