wget 與 curl 命令詳解

wget 命令

wget命令用來從指定的URL下載文件。wget很是穩定,它在帶寬很窄的狀況下和不穩定網絡中有很強的適應性,若是是因爲網絡的緣由下載失敗,wget會不斷的嘗試,直到整個文件下載完畢。若是是服務器打斷下載過程,它會再次聯到服務器上從中止的地方繼續下載。這對從那些限定了連接時間的服務器上下載大文件很是有用。html

命令格式:wget [選項] URL資源web

1. 下載單個文件json

  • wget http://www.example.com/testfile.zip

下載的文件並保存在當前目錄,在下載的過程當中會顯示進度條,包含(下載完成百分比,已經下載的字節,當前下載速度,剩餘下載時間)瀏覽器

2. 下載並以不一樣的文件名保存服務器

  • wget -O myfile.zip http://www.example.com/testfile.zipcookie

    • -O 自定義文件名:重命名下載的文件

若是不指定"-O" 選項,wget默認會以 url 路徑最後一個 "/" 的後面所有字符爲下載的文件名,如wget http://www.example.com/testfile?id=123,下載後的文件名就爲 testfile?id=123網絡

3. 斷點續傳app

  • wget -c http://www.example.com/testfile.zipcurl

    • -c:繼續接着執行上次未下載完的任務

當下載的文件特別大或者網絡緣由,文件沒有下載完鏈接就已經被斷開,使用 -c 選項能夠在網絡鏈接恢復時接着上次的下載任務繼續下載,而不須要重頭開始下載文件工具

wget默認重試20次鏈接下載文件,若是網絡一直有問題下載可能失敗。若是須要的話,你可使用 --tries增長重試次數。例如設置最多重試40次: wget --tries=40 http://www.example.com/testfile.zip

4. 後臺下載

  • wget -b http://www.example.com/testfile.zip

    • -b:之後臺運行的方式下載

對於下載很是大的文件不能及時下載完時,能夠進行後臺下載。後臺下載時會在當前下載目錄下建立一個 "wget-log" 文件記錄下載日誌,可使用 tail -f wget-log 命令查看下載進度

5. 帶寬控制和下載配額

  • wget --limit-rate=下載速度 http://www.example.com/testfile.zip

    • --limit-rate=下載速度:限定不超過指定的下載速度。例如:--limit-rate=300k

當你執行wget的時候,它默認會佔用所有可能的寬帶下載,可是當你準備下載一個大文件,而你還須要下載其它文件時就有必要限速了。

若是還須要限制下載配額,可以使用選項 "-Q 下載配額",下載數據超過了指定配額會中止下載。注意,該選項對於單個文件下載無效,只適用於多文件下載遞歸下載,例如:wget -Q 10m -i dowload.txt,若是不指定下載配額會下載download.txt文件包含的全部url,若是指定了下載配額爲10m,下載數據超過了10m會中止後面url的下載(一個文件正在下載過程當中下載數據超過了下載配額會繼續完成該文件的下載不會當即中止下載)。

6. 多文件下載

  • wget -i url文件

    • -i url文件:從指定文件獲取要下載的URL地址

若是有多個url資源須要下載,那麼能夠先生成一個文件,把下載地址的url按行寫入該文件,而後使用 "-i" 選項指定該文件就能夠批量下載了

7. 密碼認證下載

  • wget --http-user=USER --http-password=PASS http://www.example.com/testfile.zip

    • --http-user=USER:設置 http 用戶名爲 USER
    • --http-password=PASS:設置 http 密碼爲 PASS
    • --ftp-user=USER:設置 ftp 用戶名爲 USER
    • --ftp-password=PASS:設置 ftp 密碼爲 PASS

對於須要證書作認證的網站,就只能利用其餘下載工具了,例如curl

8. 遞歸下載

  • wget -r http://www.example.com/path1/path2/

    • -r:遞歸在下整個站點(www.example.com)資源
    • -nd:遞歸下載時不建立一層一層的目錄,把全部的文件下載到當前目錄;不指定該選項默認按照資源在站點位置建立相應目錄
    • -np:遞歸下載時不搜索上層目錄,只在當前路徑path2下進行下載;不指定該選項默認搜素整個站點
    • -A 後綴名:指定要下載文件的後綴名,多個後綴名之間使用逗號進行分隔
    • -R 後綴名:排除要下載文件的後綴名,多個後綴名之間使用逗號進行分隔
    • -L:遞歸時不進入其它主機。不指定該選項的話,若是站點包含了外部站點的連接,這樣可能會致使下載內容無限大
示例,只下載path2路徑下的全部pdf和png文件,不建立額外目錄全都保存在當前下載目錄下:
wget -r -nd -np -A pdf,png http://www.example.com/path1/path2/

curl 命令

curl命令是一個利用URL規則在命令行下工做的文件傳輸工具。它支持文件的上傳和下載,因此是綜合傳輸工具,但按傳統,習慣稱curl爲下載工具。做爲一款強力工具,curl支持包括HTTP、HTTPS、ftp等衆多協議,還支持POST、cookies、認證、從指定偏移處下載部分文件、用戶代理字符串、限速、文件大小、進度條等特徵。作網頁處理流程和數據檢索自動化,curl能夠祝一臂之力。

與wget相似的下載功能

1. 單個文件下載

  • curl [-o 自定義文件名|-O] http://www.example.com/index.html

    • -o 自定義文件名:把服務器響應輸出到指定文件
    • -O:與-o選項做用同樣,區別在於以 url 路徑最後一個"/"以後的部分做爲文件名

若是這兩個選項都不寫,curl 默認會把服務器響應內容輸出到終端

2. 斷點續傳

  • curl -O -C 偏移量 http://www.example.com/testfile.zip

    • -C 偏移量:從指定的偏移量處繼續下載,偏移量以字節爲單位

若是讓curl自動推斷出正確的續傳位置可使用 "-" 代替偏移量,例如:
curl -O -C - http://www.example.com/testfile.zip

3. 帶寬控制和下載配額

  • curl -O --limit-rate 下載速度 http://www.example.com/testfile.zip

    • --limit-rate 下載速度:限定不超過指定的下載速度。例:--limit-rate 500k
    • --max-filesize 下載配額:指定最大可下載文件大小

處理複雜的web請求

1. 自動跳轉

  • curl -L http://www.example.com

    • -L:自動跳轉到重定向連接(Location)

有些連接訪問時會自動跳轉(響應狀態碼爲3xx),-L參數會讓 HTTP 請求跟隨服務器的重定向。例如:訪問 "http://a.com" 會重定向到 "http://b.com",使用"-L"選項會返回 "http://b.com" 的響應內容

2. 顯示響應頭信息

  • curl -i http://www.example.com

    • -i:輸出包含響應頭信息
    • -I:輸出僅包含響應頭信息,不包含響應內容

3. 顯示通訊過程

  • curl -v http://www.example.com

    • -v:顯示一次http通訊的整個過程,包括端口鏈接和http request頭信息

若是還須要查看額外的通訊信息,還可使用選項 "--trace 輸出文件" 或者 "--trace-ascii 輸出文件",例如:curl --trace-ascii output.txt http://www.example.com,打開文件 "output.txt"能夠查看結果。

4. 指定http請求方式

  • curl -X 請求方式 http://www.example.com/test

    • -X 請求方式:指定http請求方式(GET|POST|DELETE|PUT等)。默認是"GET"

5. 添加http請求頭

  • curl -H 'kev:value' http://www.example.com/test

    • -H 'kev:value':添加http請求頭。例:-H 'Content-Type:application/json'

添加多個請求頭,-H 選項重複屢次便可。例如:
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' http://www.example.com/test

6. 傳遞請求參數

  • curl -X POST -d '參數' http://www.example.com/test

    • -d '參數':指定POST請求體。參數形式能夠是 "k1=v1&k2=v2", 也能夠是json串
    • --data-urlencode '參數':與 -d 相同,區別在於會自動將發送的數據進行 URL 編碼

使用 -d 參數之後,HTTP 請求會自動加上標頭"Content-Type:application/x-www-form-urlencoded",而且會自動將請求轉爲 POST 方法,所以能夠省略 "-X POST"。若是要發送的請求體爲json串,須要指定"Content-Type:application/json",例如:
curl -d '{"user":"zhangsan", "password":"123456"}' -H 'Content-Type:application/json' http://www.example.com/login

參數較多時,能夠下把參數數據保存到本地文本中,而後從文本中讀取參數數據。例如:
curl -d '@requestData.txt' -H 'Content-Type:application/json' http://www.example.com/login
若是要以GET請求方式發送表單數據,能夠直接把參數直接追加url以後。例如:
curl http://www.example.com/login?user=zhansan&password=123456

7. 文件上傳

  • curl -F 'file=@文件' https://www.example.com/test

    • -F 'file=@文件':模擬http表單向服務器上傳文件。更多參數形式:file=@文件;name1=value1;name2=value2

文件上傳時 -F 選項默認會給 HTTP 請求頭加上 Content-Type: multipart/form-data,默認文件MIME類型爲 application/octet-stream

指定上傳文件 MIME 類型。下面示例指定MIME類型爲"image/png"
curl -F 'file=@photo.png;type=image/png' https://google.com/profile

指定上傳文件名。下面示例中原始文件名爲"photo.png",可是服務器接收到的文件名爲 "me.png"
curl -F 'file=@photo.png;filename=me.png' https://google.com/profile

8. 設置來源網址

  • curl -e '源網址' https://www.example.com

    • -e '源網址'--referer '源網址':設置來源網址,即http請求頭的 Referer字段。和 -H 選項直接設置請求頭 "Referer" 字段等效

9. 設置客戶端用戶代理

  • curl -A '代理信息' https://www.example.com

    • -A '代理信息'--user-agent '代理信息':設置客戶端用戶代理,即http請求頭的 User-Agent字段。和 -H 選項直接設置請求頭 "User-Agent" 字段等效
將"User-Agent"改爲 Chrome 瀏覽器,示例:
curl -A 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36' https://www.example.com

移出 "User-Agent" 請求頭,示例:
curl -A '' https://www.example.com

10. 設置cookie

  • curl -b '參數' https://www.example.com

    • -b '參數'--cookie '參數':設置cookie參數。參數形式能夠是 key1=value1;key2=value2...,也能夠是一個文件
    • -c 文件:把服務器響應的cookie信息寫入到文件中
至於具體的cookie的值,能夠從http response頭信息的 "Set-Cookie" 字段中獲得,能夠保存服務器返回的cookie信息到文件,再用這文件做爲下次請求的cookie信息,以下:
curl -c cookies.txt http://example.com
curl -b cookies.txt http://example.com

11. 設置服務器認證的用戶名和密碼

  • curl -u 'user[:password]' https://www.example.com

    • -u 'user[:password]':設置服務器認證的用戶名和密碼。只有用戶名時,執行curl後提示輸入密碼

wget與curl對比

wget 是一個獨立的下載程序,無需額外的資源庫,它也容許你下載網頁中或是 FTP 目錄中的任何內容, 能享受它超凡的下載速度,簡單直接。
curl是一個多功能工具,是libcurl這個庫支持的。它能夠下載網絡內容,但同時它也能作更多別的事情。

從用途方面,wget傾向於網絡文件下載;curl傾向於網絡接口調試,至關於一個無圖形界面的 PostMan 工具


參考文章:
http://www.ruanyifeng.com/blog/2011/09/curl.html

相關文章
相關標籤/搜索