目錄
一、curl?和?wget?區別
二、wget的使用
2.1 參數說明
2.2?wget 使用示例
三、curl的使用
3.1 參數說明
3.2 curl使用示例
一、curl?和?wget?區別
wget 和 curl?都可以下載內容。它們都可以向互聯網發送請求并返回請求項,可以是文件、圖片或者是其他諸如網站的原始 HTML 之類。
這兩個程序都可以進行 HTTP POST 請求。這意味著它們都可以向網站發送數據,比如說填充表單。
兩者都是命令行工具,它們都被設計成可腳本化。wget 和 curl都可以寫進Bash 腳本 ,自動與新內容交互,下載所需內容。
1. curl 是 libcurl 庫支持的,wget 是一個純粹的命令行命令。
2. curl 在指定要下載的鏈接時能夠支持 URL 的序列或集合,而 wget 則不能這樣;
3. wget 支持遞歸下載,而 curl 則沒有這個功能。
4. curl 由于可自定義各種請求參數,所以在模擬 web 請求方面更擅長;curl 是一個多功能工具。
curl 是一個多功能工具。當然,它可以下載網絡內容,但同時它也能做更多別的事情。curl 技術支持庫是:libcurl。這就意味著你可以基于 curl 編寫整個程序,允許你基于 libcurl 庫中編寫圖形環境的下載程序,訪問它所有的功能。curl 寬泛的網絡協議支持可能是其最大的賣點。curl 支持訪問 HTTP 和 HTTPS 協議,能夠處理 FTP 傳輸。它支持 LDAP 協議,甚至支持 Samba 分享。實際上,你還可以用 curl 收發郵件。curl 也有一些簡潔的安全特性。cURL 支持安裝許多 SSL/TLS 庫,也支持通過網絡代理訪問,包括 SOCKS。這意味著,你可以越過 Tor 來使用cURL。curl 同樣支持讓數據發送變得更容易的 gzip 壓縮技術。
5. wget 由于支持 ftp 和 Recursive(遞歸)下載, 所以在下載文件方面更擅長。
wget 簡單直接。這意味著你能享受它超凡的下載速度。
wget 是一個獨立的程序,無需額外的資源庫,更不會做其范疇之外的事情。
wget 是專業的直接下載程序,支持遞歸下載。同時,它也允許你下載網頁中或是 FTP 目錄中的任何內容。
wget 擁有智能的默認設置。它規定了很多在常規瀏覽器里的事物處理方式,比如 cookies 和重定向,這都不需要額外的配置。
?應該使用 curl還是使用 wget?這個比較得看實際用途。如果你想快速下載并且沒有擔心參數標識的需求,那你應該使用輕便有效的 wget。如果你想做一些更復雜的使用,你應該選擇 curl 。
二、wget的使用
2.1 參數說明
man wget
也可以使用wget -h???或者? wget --help 查看
命令格式:?
wget [參數列表] [目標軟件、網頁的網址] ? ? ? ? ? ? // ?用法: wget [選項]... [URL]...長選項所必須的參數在使用短選項時也是必須的。
啟動:
? -V, ?--version ? ? ? ? ? ? ? ? ? 顯示 Wget 的版本信息并退出
? -h, ?--help ? ? ? ? ? ? ? ? ? ? ?打印此幫助
? -b, ?--background ? ? ? ? ? ? ? ?啟動后轉入后臺
? -e, ?--execute=命令 ? ? ? ? ? ? ?運行一個“.wgetrc”風格的命令日志和輸入文件:
? -o, ?--output-file=文件 ? ? ? ? ?將日志信息寫入 FILE
? -a, ?--append-output=文件 ? ? ? ?將信息添加至 FILE
? -d, ?--debug ? ? ? ? ? ? ? ? ? ? 打印大量調試信息
? -q, ?--quiet ? ? ? ? ? ? ? ? ? ? 安靜模式 (無信息輸出)
? -v, ?--verbose ? ? ? ? ? ? ? ? ? 詳盡的輸出 (此為默認值)
? -nv, --no-verbose ? ? ? ? ? ? ? ?關閉詳盡輸出,但不進入安靜模式
? ? ? ?--report-speed=類型 ? ? ? ? 以 <類型> 報告帶寬。類型可以是 bits
? -i, ?--input-file=文件 ? ? ? ? ? 下載本地或外部 <文件> 中的 URL
? -F, ?--force-html ? ? ? ? ? ? ? ?把輸入文件當成 HTML 文件
? -B, ?--base=URL ? ? ? ? ? ? ? ? ?解析相對于 URL 的 HTML 輸入文件鏈接 (-i -F)
? ? ? ?--config=文件 ? ? ? ? ? ? ? 指定要使用的配置文件
? ? ? ?--no-cookies ? ? ? ? ? ? ? ?不讀取任何配置文件
? ? ? ?--rejected-log=文件 ? ? ? ? 將拒絕 URL 的原因寫入 <文件>。下載:
? -t, ?--tries=數字 ? ? ? ? ? ? ? ?設置重試次數為 <數字> (0 代表無限制)
? ? ? ?--retry-connrefused ? ? ? ? 即使拒絕連接也是重試
? -O, ?--output-document=文件 ? ? ?將文檔寫入 FILE
? -nc, --no-clobber ? ? ? ? ? ? ? ?不要下載已存在將被覆蓋的文件
? -c, ?--continue ? ? ? ? ? ? ? ? ?斷點續傳下載文件
? ? ? ?--start-pos=偏移量 ? ? ? ? ?從由零計數的 <偏移量> 開始下載
? ? ? ?--progress=類型 ? ? ? ? ? ? 選擇進度條類型
? ? ? ?--show-progress ? ? ? ? ? ? 在任意啰嗦狀態下都顯示進度條
? -N, ?--timestamping ? ? ? ? ? ? ?只獲取比本地文件新的文件
? ? ? ?--no-if-modified-since ? ? ?不要在時間戳 (timestamping) 模式下使用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if-modified-since get 條件請求
? ? ? ?--no-use-server-timestamps ?don't set the local file's timestamp by
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?the one on the server
? -S, ?--server-response ? ? ? ? ? 打印服務器響應
? ? ? ?--spider ? ? ? ? ? ? ? ? ? ?不下載任何文件
? -T, ?--timeout=SECONDS ? ? ? ? ? 將所有超時設為 SECONDS 秒
? ? ? ?--dns-timeout=SECS ? ? ? ? ?設置 DNS 查尋超時為 SECS 秒
? ? ? ?--connect-timeout=SECS ? ? ?設置連接超時為 SECS 秒
? ? ? ?--read-timeout=SECS ? ? ? ? 設置讀取超時為 SECS 秒
? -w, ?--wait=SECONDS ? ? ? ? ? ? ?等待間隔為 SECONDS 秒
? ? ? ?--waitretry=SECONDS ? ? ? ? 在獲取文件的重試期間等待 1..SECONDS 秒
? ? ? ?--random-wait ? ? ? ? ? ? ? 獲取多個文件時,每次隨機等待間隔 (0.5~1.5)*WAIT 秒
? ? ? ?--no-proxy ? ? ? ? ? ? ? ? ?禁止使用代理
? -Q, ?--quota=數字 ? ? ? ? ? ? ? ?設置獲取配額為 <數字> 字節
? ? ? ?--bind-address=ADDRESS ? ? ?綁定至本地主機上的 ADDRESS (主機名或是 IP)
? ? ? ?--limit-rate=RATE ? ? ? ? ? 限制下載速率為 RATE
? ? ? ?--no-dns-cache ? ? ? ? ? ? ?關閉 DNS 查詢緩存
? ? ? ?--restrict-file-names=系統 ?限定文件名中的字符為 <系統> 允許的字符
? ? ? ?--ignore-case ? ? ? ? ? ? ? 匹配文件/目錄時忽略大小寫
? -4, ?--inet4-only ? ? ? ? ? ? ? ?僅連接至 IPv4 地址
? -6, ?--inet6-only ? ? ? ? ? ? ? ?僅連接至 IPv6 地址
? ? ? ?--prefer-family=地址族 ? ? ?首先連接至指定家族(IPv6,IPv4 或 none)的地址
? ? ? ?--user=用戶 ? ? ? ? ? ? ? ? 將 ftp 和 http 的用戶名均設置為 <用戶>
? ? ? ?--password=密碼 ? ? ? ? ? ? 將 ftp 和 http 的密碼均設置為 <密碼>
? ? ? ?--ask-password ? ? ? ? ? ? ?提示輸入密碼
? ? ? ?--no-iri ? ? ? ? ? ? ? ? ? ?關閉 IRI 支持
? ? ? ?--local-encoding=ENC ? ? ? ?使用 ENC 作為 IRI (國際化資源標識符) 的本地編碼
? ? ? ?--remote-encoding=ENC ? ? ? 使用 ENC 作為默認遠程編碼
? ? ? ?--unlink ? ? ? ? ? ? ? ? ? ?覆蓋前移除文件目錄:
? -nd, --no-directories ? ? ? ? ? ?不創建目錄
? -x, ?--force-directories ? ? ? ? 強制創建目錄
? -nH, --no-host-directories ? ? ? 不要創建主 (host) 目錄
? ? ? ?--protocol-directories ? ? ?在目錄中使用協議名稱
? -P, ?--directory-prefix=前綴 ? ? 保存文件到 <前綴>/..
? ? ? ?--cut-dirs=數字 ? ? ? ? ? ? 忽略遠程目錄中 <數字> 個目錄層。HTTP 選項:
? ? ? ?--http-user=用戶 ? ? ? ? ? ?設置 http 用戶名為 <用戶>
? ? ? ?--http-password=密碼 ? ? ? ?設置 http 密碼為 <密碼>
? ? ? ?--no-cache ? ? ? ? ? ? ? ? ?不使用服務器緩存的數據。
? ? ? ?--default-page=NAME ? ? ? ? 改變默認頁 (通常是“index.html”)。
? -E, ?--adjust-extension ? ? ? ? ?以合適的擴展名保存 HTML/CSS 文檔
? ? ? ?--ignore-length ? ? ? ? ? ? 忽略頭部的‘Content-Length’區域
? ? ? ?--header=字符串 ? ? ? ? ? ? 在頭部插入 <字符串>
? ? ? ?--max-redirect ? ? ? ? ? ? ?每頁所允許的最大重定向
? ? ? ?--proxy-user=用戶 ? ? ? ? ? 使用 <用戶> 作為代理用戶名
? ? ? ?--proxy-password=密碼 ? ? ? 使用 <密碼> 作為代理密碼
? ? ? ?--referer=URL ? ? ? ? ? ? ? 在 HTTP 請求頭包含‘Referer: URL’
? ? ? ?--save-headers ? ? ? ? ? ? ?將 HTTP 頭保存至文件。
? -U, ?--user-agent=代理 ? ? ? ? ? 標識自己為 <代理> 而不是 Wget/VERSION。
? ? ? ?--no-http-keep-alive ? ? ? ?禁用 HTTP keep-alive (持久連接)。
? ? ? ?--no-cookies ? ? ? ? ? ? ? ?不使用 cookies。
? ? ? ?--load-cookies=文件 ? ? ? ? 會話開始前從 <文件> 中載入 cookies。
? ? ? ?--save-cookies=文件 ? ? ? ? 會話結束后保存 cookies 至 FILE。
? ? ? ?--keep-session-cookies ? ? ?載入并保存會話 (非永久) cookies。
? ? ? ?--post-data=字符串 ? ? ? ? ?使用 POST 方式;把 <字串>作為數據發送。
? ? ? ?--post-file=文件 ? ? ? ? ? ?使用 POST 方式;發送 <文件> 內容。
? ? ? ?--method=HTTP方法 ? ? ? ? ? 在請求中使用指定的 <HTTP 方法>。
? ? ? ?--post-data=字符串 ? ? ? ? ?把 <字串> 作為數據發送,必須設置 --method
? ? ? ?--post-file=文件 ? ? ? ? ? ?發送 <文件> 內容,必須設置 --method
? ? ? ?--content-disposition ? ? ? 當選擇本地文件名時允許 Content-Disposition
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?頭部 (實驗中)。
? ? ? ?--content-on-error ? ? ? ? ?在服務器錯誤時輸出接收到的內容
? ? ? ?--auth-no-challenge ? ? ? ? 不先等待服務器詢問就發送基本 HTTP 驗證信息。HTTPS (SSL/TLS) 選項:
? ? ? ?--secure-protocol=PR ? ? ? ? 選擇安全協議,可以是 auto、SSLv2、
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SSLv3、TLSv1、PFS 中的一個。
? ? ? ?--https-only ? ? ? ? ? ? ? ? 只跟隨安全的 HTTPS 鏈接
? ? ? ?--no-check-certificate ? ? ? 不要驗證服務器的證書。
? ? ? ?--certificate=文件 ? ? ? ? ? 客戶端證書文件。
? ? ? ?--certificate-type=類型 ? ? ?客戶端證書類型,PEM 或 DER。
? ? ? ?--private-key=文件 ? ? ? ? ? 私鑰文件。
? ? ? ?--private-key-type=類型 ? ? ?私鑰文件類型,PEM 或 DER。
? ? ? ?--ca-certificate=文件 ? ? ? ?帶有一組 CA 證書的文件。
? ? ? ?--ca-directory=DIR ? ? ? ? ? 保存 CA 證書的哈希列表的目錄。
? ? ? ?--ca-certificate=文件 ? ? ? ?帶有一組 CA 證書的文件。
? ? ? ?--pinnedpubkey=FILE/HASHES ?Public key (PEM/DER) file, or any number
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?of base64 encoded sha256 hashes preceded by
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'sha256//' and seperated by ';', to verify
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?peer againstHSTS 選項:
? ? ? ?--no-hsts ? ? ? ? ? ? ? ? ? 禁用 HSTS
? ? ? ?--hsts-file ? ? ? ? ? ? ? ? HSTS 數據庫路徑(將覆蓋默認值)FTP 選項:
? ? ? ?--ftp-user=用戶 ? ? ? ? ? ? 設置 ftp 用戶名為 <用戶>。
? ? ? ?--ftp-password=密碼 ? ? ? ? 設置 ftp 密碼為 <密碼>
? ? ? ?--no-remove-listing ? ? ? ? 不要刪除‘.listing’文件
? ? ? ?--no-glob ? ? ? ? ? ? ? ? ? 不在 FTP 文件名中使用通配符展開
? ? ? ?--no-passive-ftp ? ? ? ? ? ?禁用“passive”傳輸模式
? ? ? ?--preserve-permissions ? ? ?保留遠程文件的權限
? ? ? ?--retr-symlinks ? ? ? ? ? ? 遞歸目錄時,獲取鏈接的文件 (而非目錄)FTPS 選項:
? ? ? ?--ftps-implicit ? ? ? ? ? ? ? ? 使用隱式 FTPS(默認端口 990)
? ? ? ?--ftps-resume-ssl ? ? ? ? ? ? ? 打開數據連接時繼續控制連接中的 SSL/TLS 會話
? ? ? ?--ftps-clear-data-connection ? ?只加密控制信道;數據傳輸使用明文
? ? ? ?--ftps-fallback-to-ftp ? ? ? ? ?回落到 FTP,如果目標服務器不支持 FTPS
WARC 選項:
? ? ? ?--warc-file=文件名 ? ? ? ? ?在一個 .warc.gz 文件里保持請求/響應數據
? ? ? ?--warc-header=字符串 ? ? ? ?在頭部插入 <字符串>
? ? ? ?--warc-max-size=數字 ? ? ? ?將 WARC 的最大尺寸設置為 <數字>
? ? ? ?--warc-cdx ? ? ? ? ? ? ? ? ?寫入 CDX 索引文件
? ? ? ?--warc-dedup=文件名 ? ? ? ? 不要記錄列在此 CDX 文件內的記錄
? ? ? ?--no-warc-compression ? ? ? 不要 GZIP 壓縮 WARC 文件
? ? ? ?--no-warc-digests ? ? ? ? ? 不要計算 SHA1 摘要
? ? ? ?--no-warc-keep-log ? ? ? ? ?不要在 WARC 記錄中存儲日志文件
? ? ? ?--warc-tempdir=目錄 ? ? ? ? WARC 寫入器的臨時文件目錄遞歸下載:
? -r, ?--recursive ? ? ? ? ? ? ? ? 指定遞歸下載
? -l, ?--level=數字 ? ? ? ? ? ? ? ?最大遞歸深度 (inf 或 0 代表無限制,即全部下載)。
? ? ? ?--delete-after ? ? ? ? ? ? 下載完成后刪除本地文件
? -k, ?--convert-links ? ? ? ? ? ?讓下載得到的 HTML 或 CSS 中的鏈接指向本地文件
? ? ? ?--convert-file-only ? ? ? ? convert the file part of the URLs only (usually known as the basename)
? ? ? ?--backups=N ? ? ? ? ? ? ? ? 寫入文件 X 前,輪換移動最多 N 個備份文件
? -K, ?--backup-converted ? ? ? ? 在轉換文件 X 前先將它備份為 X.orig。
? -m, ?--mirror ? ? ? ? ? ? ? ? ? -N -r -l inf --no-remove-listing 的縮寫形式。
? -p, ?--page-requisites ? ? ? ? ?下載所有用于顯示 HTML 頁面的圖片之類的元素。
? ? ? ?--strict-comments ? ? ? ? ?用嚴格方式 (SGML) 處理 HTML 注釋。遞歸接受/拒絕:
? -A, ?--accept=列表 ? ? ? ? ? ? ? 逗號分隔的可接受的擴展名列表
? -R, ?--reject=列表 ? ? ? ? ? ? ? 逗號分隔的要拒絕的擴展名列表
? ? ? ?--accept-regex=REGEX ? ? ? ?匹配接受的 URL 的正則表達式
? ? ? ?--reject-regex=REGEX ? ? ? ?匹配拒絕的 URL 的正則表達式
? ? ? ?--regex-type=類型 ? ? ? ? ? 正則類型 (posix|pcre)
? -D, ?--domains=列表 ? ? ? ? ? ? ?逗號分隔的可接受的域名列表
? ? ? ?--exclude-domains=列表 ? ? ?逗號分隔的要拒絕的域名列表
? ? ? ?--follow-ftp ? ? ? ? ? ? ? ?跟蹤 HTML 文檔中的 FTP 鏈接
? ? ? ?--follow-tags=列表 ? ? ? ? ?逗號分隔的跟蹤的 HTML 標識列表
? ? ? ?--ignore-tags=列表 ? ? ? ? ?逗號分隔的忽略的 HTML 標識列表
? -H, ?--span-hosts ? ? ? ? ? ? ? ?遞歸時轉向外部主機
? -L, ?--relative ? ? ? ? ? ? ? ? ?僅跟蹤相對鏈接
? -I, ?--include-directories=列表 ?允許目錄的列表
? ? ? ?--trust-server-names ? ? ? ?使用重定向 URL 的最后一段作為本地文件名
? -X, ?--exclude-directories=列表 ?排除目錄的列表
? -np, --no-parent ? ? ? ? ? ? ? ? 不追溯至父目錄
2.2?wget 使用示例
# 下載文件
wget http://xxx/test.txt# 下載文件并重命名
wget -O newtest.txt http://xxx/test.txt # O大寫# 斷點續傳
# -t 表示重試次數,例如:-t 100 重試100次,如果設成 -t 0 表示無窮次重試。
# -T 參數表示超時等待時間,例如:-T 120,表示等待120秒連接不上就算超時。
wget -c http://xxx/test.txt# 限速下載
wget --limit-rate=50k http://xxx/test.txt# 后臺下載
# 對于下載非常大的文件的時候,我們可以使用參數-b進行后臺下載。
wget -b http://xxx/test.txt
Continuing in background, pid 1840.
Output will be written to `wget-log’. # 可以使用以下命令來察看下載進度
tail -f wget-log # 下載多個文件 (批量下載)
# 如果有多個文件需要下載,那么可以生成一個文件,把每個文件的 URL 寫一行。
# 例如,生成文件 download.txt,然后用命令:wget -i download.txt
# 這樣就會把download.txt里面列出的每個URL都下載下來。(如果列的是文件就下載文件,如果列的是網站,那么下載首頁)
wget -i download.txt# 顯示響應頭部信息
wget --server-response http://xxx/test.txt# wget打包下載網站
wget --mirror p --convert-links -P ./ http://xxx# 過濾指定格式下載
# 可以指定讓 wget 只下載一類文件,或者不下載什么文件。
# 例如: wget -m –reject=gif http://xxx
# 表示下載 http://xxx,但是忽略gif文件。
# –accept=LIST 可以接受的文件類型,
# –reject=LIST 拒絕接受的文件類型。
# 如果你想下載一個網站,但你不希望下載圖片,你可以使用以下命令。
wget –reject=gif url # 下載指定格式文件
# 可以在以下情況使用該功能
# 下載一個網站的所有圖片
# 下載一個網站的所有視頻
# 下載一個網站的所有PDF文件
wget -r -A.pdf url # 把下載信息存入日志文件
# 如果不希望下載信息直接顯示在終端而是在一個日志文件,可以使用以下命令:
wget -o download.log URL # 密碼和認證
# wget 可以處理利用 用戶名/密碼 方式限制訪問的網站,可以利用兩個參數:
# --http-user=用戶 設置 http 用戶名為 <用戶>
# --http-password=密碼 設置 http 密碼為 <密碼>
# 對于需要證書做認證的網站,就只能利用其他下載工具了,例如 curl
三、curl的使用
3.1 參數說明
man curl
也可以使用curl?-h???或者? curl?--help 查看
3.2 curl使用示例
# 基本用法
curl http://www.baidu.com
# 執行后,www.baidu.com 的html 就會顯示在屏幕上了
# Ps:由于安裝 linux 的時候很多時候是沒有安裝桌面的,也意味著沒有瀏覽器,因此這個方法也經常用于測試一臺服務器是否可以到達一個網站# 保存訪問的網頁
# 使用 linux 的重定向功能保存:
curl http://www.baidu.com >> baidu.html
# 可以使用curl的內置option:-o(小寫)保存網頁:curl -o linux.html http://www.baidu.com
# 可以使用curl的內置option:-O(大寫)保存網頁中的文件:curl -O http://www.baidu.com/hello.sh# 測試網頁返回值
curl -o /dev/null -s -w %{http_code} www.baidu.com# 下載文件
curl -o dodo1.jpg http://www.baidu.com/dodo1.JPG ?# 使用內置option:-o(小寫)
curl -O http://www.baidu.com/dodo1.JPG ?#使用內置option:-O(大寫)#循環下載。有時候下載圖片可以能是前面的部分名稱是一樣的,就最后的名字不一樣
curl -O http://www.baidu.com/dodo[1-5].JPG
#這樣就會把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下來# 下載重命名
curl -O http://www.baidu.com/{hello,bb}/dodo[1-5].JP# 由于下載的hello與bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下載的會把第一次下載的覆蓋,這樣就需要對文件進行重命名。
curl -o #1_#2.JPG http://www.baidu.com/{hello,bb}/dodo[1-5].JPG
# 這樣在hello/dodo1.JPG的文件下載下來就會變成hello_dodo1.JPG,其他文件依此類推,從而有效的避免了文件被覆蓋# 通過ftp下載文件
# curl 可以通過 ftp下載文件,curl 提供兩種從 ftp 中下載的語法
curl -O -u 用戶名:密碼 ftp://www.baidu.com/dodo1.JPG
curl -O ftp://用戶名:密碼@www.baidu.com/dodo1.JPG# 顯示進度條,示例:
curl -# -O http://www.baidu.com/dodo1.JPG
# 不顯示進度條 示例:
curl -s -O http://www.baidu.com/dodo1.JPG# 上傳文件
# curl 不僅僅可以下載文件,還可以上傳文件。通過內置 option:-T 來實現
curl -T dodo1.JPG -u 用戶名:密碼 ftp://www.baidu.com/img/