使用第三方命令行工具curl.exe或者wget.exe
一、curl.exe下載
@echo off ::curl "http://46603.ys168.com/Limit.aspx?dlmc=46603&cs=2" > page.txt ::不會顯示下載進度信息 curl -s -o D:\Downloads\dodo1.jpg http://ys168.com/images/ys_welcome.jpg pause
二、wget.exe下載
@echo off ::不會顯示下載進度信息 wget -q -O D:\Downloads\wget--jpeg.jpg http://ys168.com/images/ys_welcome.jpg pause
=====詳細說明======
curl語法
在Linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持文件的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url為下載工具。
常見參數:
-A/--user-agent <string> 設置用戶代理發送給服務器 -b/--cookie <name=string/file> cookie字符串或文件讀取位置 -c/--cookie-jar <file> 操作結束后把cookie寫入到這個文件中 -C/--continue-at <offset> 斷點續轉 -D/--dump-header <file> 把header信息寫入到該文件中 -e/--referer 來源網址 -f/--fail 連接失敗時不顯示http錯誤 -o/--output 把輸出寫到該文件中 -O/--remote-name 把輸出寫到該文件中,保留遠程文件的文件名 -r/--range <range> 檢索來自HTTP/1.1或FTP服務器字節范圍 -s/--silent 靜音模式。不輸出任何東西 -T/--upload-file <file> 上傳文件 -u/--user <user[:password]> 設置服務器的用戶和密碼 -w/--write-out [format] 什么輸出完成后 -x/--proxy <host[:port]> 在給定的端口上使用HTTP代理 -#/--progress-bar 進度條顯示當前的傳送狀態
例子:
1、基本用法
# curl http://www.linux.com
執行后,www.linux.com 的html就會顯示在屏幕上了
Ps:由於安裝linux的時候很多時候是沒有安裝桌面的,也意味着沒有瀏覽器,因此這個方法也經常用於測試一台服務器是否可以到達一個網站
2、保存訪問的網頁
2.1:使用linux的重定向功能保存
# curl http://www.linux.com >> linux.html
2.2:可以使用curl的內置option:-o(小寫)保存網頁
$ curl -o linux.html http://www.linux.com
執行完成后會顯示如下界面,顯示100%則表示保存成功
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 79684 0 79684 0 0 3437k 0 --:--:-- --:--:-- --:--:-- 7781k
2.3:可以使用curl的內置option:-O(大寫)保存網頁中的文件
要注意這里后面的url要具體到某個文件,不然抓不下來
# curl -O http://www.linux.com/hello.sh
3、測試網頁返回值
# curl -o /dev/null -s -w %{http_code} www.linux.com
Ps:在腳本中,這是很常見的測試網站是否正常的用法
4、指定proxy服務器以及其端口
很多時候上網需要用到代理服務器(比如是使用代理服務器上網或者因為使用curl別人網站而被別人屏蔽IP地址的時候),幸運的是curl通過使用內置option:-x來支持設置代理
# curl -x 192.168.100.100:1080 http://www.linux.com
5、cookie
有些網站是使用cookie來記錄session信息。對於chrome這樣的瀏覽器,可以輕易處理cookie信息,但在curl中只要增加相關參數也是可以很容易的處理cookie
5.1:保存http的response里面的cookie信息。內置option:-c(小寫)
# curl -c cookiec.txt http://www.linux.com
執行后cookie信息就被存到了cookiec.txt里面了
5.2:保存http的response里面的header信息。內置option: -D
# curl -D cookied.txt http://www.linux.com
執行后cookie信息就被存到了cookied.txt里面了
注意:-c(小寫)產生的cookie和-D里面的cookie是不一樣的。
5.3:使用cookie
很多網站都是通過監視你的cookie信息來判斷你是否按規矩訪問他們的網站的,因此我們需要使用保存的cookie信息。內置option: -b
# curl -b cookiec.txt http://www.linux.com
6、模仿瀏覽器
有些網站需要使用特定的瀏覽器去訪問他們,有些還需要使用某些特定的版本。curl內置option:-A可以讓我們指定瀏覽器去訪問網站
# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
這樣服務器端就會認為是使用IE8.0去訪問的
7、偽造referer(盜鏈)
很多服務器會檢查http訪問的referer從而來控制訪問。比如:你是先訪問首頁,然后再訪問首頁中的郵箱頁面,這里訪問郵箱的referer地址就是訪問首頁成功后的頁面地址,如果服務器發現對郵箱頁面訪問的referer地址不是首頁的地址,就斷定那是個盜連了
curl中內置option:-e可以讓我們設定referer
# curl -e "www.linux.com" http://mail.linux.com
這樣就會讓服務器其以為你是從www.linux.com點擊某個鏈接過來的
8、下載文件
8.1:利用curl下載文件。
#使用內置option:-o(小寫)
# curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
#使用內置option:-O(大寫)
# curl -O http://www.linux.com/dodo1.JPG
這樣就會以服務器上的名稱保存文件到本地
8.2:循環下載
有時候下載圖片可以能是前面的部分名稱是一樣的,就最后的尾椎名不一樣
# curl -O http://www.linux.com/dodo[1-5].JPG
這樣就會把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下來
8.3:下載重命名
# curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG
由於下載的hello與bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下載的會把第一次下載的覆蓋,這樣就需要對文件進行重命名。
# curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG
這樣在hello/dodo1.JPG的文件下載下來就會變成hello_dodo1.JPG,其他文件依此類推,從而有效的避免了文件被覆蓋
8.4:分塊下載
有時候下載的東西會比較大,這個時候我們可以分段下載。使用內置option:-r
# curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG # curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG # curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG # cat dodo1_part* > dodo1.JPG
這樣就可以查看dodo1.JPG的內容了
8.5:通過ftp下載文件
curl可以通過ftp下載文件,curl提供兩種從ftp中下載的語法
# curl -O -u 用戶名:密碼 ftp://www.linux.com/dodo1.JPG # curl -O ftp://用戶名:密碼@www.linux.com/dodo1.JPG
8.6:顯示下載進度條
# curl -# -O http://www.linux.com/dodo1.JPG
8.7:不會顯示下載進度信息
# curl -s -O http://www.linux.com/dodo1.JPG
9、斷點續傳
在windows中,我們可以使用迅雷這樣的軟件進行斷點續傳。curl可以通過內置option:-C同樣可以達到相同的效果
如果在下載dodo1.JPG的過程中突然掉線了,可以使用以下的方式續傳
# curl -C -O http://www.linux.com/dodo1.JPG
10、上傳文件
curl不僅僅可以下載文件,還可以上傳文件。通過內置option:-T來實現
# curl -T dodo1.JPG -u 用戶名:密碼 ftp://www.linux.com/img/
這樣就向ftp服務器上傳了文件dodo1.JPG
11、顯示抓取錯誤
# curl -f http://www.linux.com/error
其他參數(此處翻譯為轉載):
-a/--append 上傳文件時,附加到目標文件 --anyauth 可以使用“任何”身份驗證方法 --basic 使用HTTP基本驗證 -B/--use-ascii 使用ASCII文本傳輸 -d/--data <data> HTTP POST方式傳送數據 --data-ascii <data> 以ascii的方式post數據 --data-binary <data> 以二進制的方式post數據 --negotiate 使用HTTP身份驗證 --digest 使用數字身份驗證 --disable-eprt 禁止使用EPRT或LPRT --disable-epsv 禁止使用EPSV --egd-file <file> 為隨機數據(SSL)設置EGD socket路徑 --tcp-nodelay 使用TCP_NODELAY選項 -E/--cert <cert[:passwd]> 客戶端證書文件和密碼 (SSL) --cert-type <type> 證書文件類型 (DER/PEM/ENG) (SSL) --key <key> 私鑰文件名 (SSL) --key-type <type> 私鑰文件類型 (DER/PEM/ENG) (SSL) --pass <pass> 私鑰密碼 (SSL) --engine <eng> 加密引擎使用 (SSL). "--engine list" for list --cacert <file> CA證書 (SSL) --capath <directory> CA目 (made using c_rehash) to verify peer against (SSL) --ciphers <list> SSL密碼 --compressed 要求返回是壓縮的形勢 (using deflate or gzip) --connect-timeout <seconds> 設置最大請求時間 --create-dirs 建立本地目錄的目錄層次結構 --crlf 上傳是把LF轉變成CRLF --ftp-create-dirs 如果遠程目錄不存在,創建遠程目錄 --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用 --ftp-pasv 使用 PASV/EPSV 代替端口 --ftp-skip-pasv-ip 使用PASV的時候,忽略該IP地址 --ftp-ssl 嘗試用 SSL/TLS 來進行ftp數據傳輸 --ftp-ssl-reqd 要求用 SSL/TLS 來進行ftp數據傳輸 -F/--form <name=content> 模擬http表單提交數據 -form-string <name=string> 模擬http表單提交數據 -g/--globoff 禁用網址序列和范圍使用{}和[] -G/--get 以get的方式來發送數據 -h/--help 幫助 -H/--header <line> 自定義頭信息傳遞給服務器 --ignore-content-length 忽略的HTTP頭信息的長度 -i/--include 輸出時包括protocol頭信息 -I/--head 只顯示文檔信息 -j/--junk-session-cookies 讀取文件時忽略session cookie --interface <interface> 使用指定網絡接口/地址 --krb4 <level> 使用指定安全級別的krb4 -k/--insecure 允許不使用證書到SSL站點 -K/--config 指定的配置文件讀取 -l/--list-only 列出ftp目錄下的文件名稱 --limit-rate <rate> 設置傳輸速度 --local-port<NUM> 強制使用本地端口號 -m/--max-time <seconds> 設置最大傳輸時間 --max-redirs <num> 設置最大讀取的目錄數 --max-filesize <bytes> 設置最大下載的文件總量 -M/--manual 顯示全手動 -n/--netrc 從netrc文件中讀取用戶名和密碼 --netrc-optional 使用 .netrc 或者 URL來覆蓋-n --ntlm 使用 HTTP NTLM 身份驗證 -N/--no-buffer 禁用緩沖輸出 -p/--proxytunnel 使用HTTP代理 --proxy-anyauth 選擇任一代理身份驗證方法 --proxy-basic 在代理上使用基本身份驗證 --proxy-digest 在代理上使用數字身份驗證 --proxy-ntlm 在代理上使用ntlm身份驗證 -P/--ftp-port <address> 使用端口地址,而不是使用PASV -Q/--quote <cmd> 文件傳輸前,發送命令到服務器 --range-file 讀取(SSL)的隨機文件 -R/--remote-time 在本地生成文件時,保留遠程文件時間 --retry <num> 傳輸出現問題時,重試的次數 --retry-delay <seconds> 傳輸出現問題時,設置重試間隔時間 --retry-max-time <seconds> 傳輸出現問題時,設置最大重試時間 -S/--show-error 顯示錯誤 --socks4 <host[:port]> 用socks4代理給定主機和端口 --socks5 <host[:port]> 用socks5代理給定主機和端口 -t/--telnet-option <OPT=val> Telnet選項設置 --trace <file> 對指定文件進行debug --trace-ascii <file> Like --跟蹤但沒有hex輸出 --trace-time 跟蹤/詳細輸出時,添加時間戳 --url <URL> Spet URL to work with -U/--proxy-user <user[:password]> 設置代理用戶名和密碼 -V/--version 顯示版本信息 -X/--request <command> 指定什么命令 -y/--speed-time 放棄限速所要的時間。默認為30 -Y/--speed-limit 停止傳輸速度的限制,速度時間'秒 -z/--time-cond 傳送時間設置 -0/--http1.0 使用HTTP 1.0 -1/--tlsv1 使用TLSv1(SSL) -2/--sslv2 使用SSLv2的(SSL) -3/--sslv3 使用的SSLv3(SSL) --3p-quote like -Q for the source URL for 3rd party transfer --3p-url 使用url,進行第三方傳送 --3p-user 使用用戶名和密碼,進行第三方傳送 -4/--ipv4 使用IP4 -6/--ipv6 使用IP6
wget語法
使用方法: wget的使用形式是: wget [參數列表] URL 首先來介紹一下wget的主要參數: · -b:讓wget在后台運行,記錄文件寫在當前目錄下"wget-log"文件中; · -t [nuber of times]:嘗試次數,當wget無法與服務器建立連接時,嘗試連接多少次 。比如"-t 120"表示嘗試120次。當這一項為"0"的時候,指定嘗試無窮多次直到連接成功為止,這個 設置非常有用,當對方服務器突然關機或者網絡突然中斷的時候,可以在恢復正常后繼續 下載沒有傳完的文件; · -c:斷點續傳,這也是個非常有用的設置,特別當下載比較大的文件的時候,如果中 途意外中斷,那么連接恢復的時候會從上次沒傳完的地方接着傳,而不是又從頭開始,使 用這一項需要遠程服務器也支持斷點續傳,一般來講,基於UNIX/Linux的Web/FTP服務器 都支持斷點續傳; · -T [number of seconds]:超時時間,指定多長時間遠程服務器沒有響應就中斷連接 ,開始下一次嘗試。比如"-T 120"表示如果120秒以后遠程服務器沒有發過來數據,就重新嘗試連接。如果網絡速度比 較快,這個時間可以設置的短些,相反,可以設置的長一些,一般最多不超過900,通常 也不少於60,一般設置在120左右比較合適; · -w [number of seconds]:在兩次嘗試之間等待多少秒,比如"-w 100"表示兩次嘗試 之間等待100秒; · -Y on/off:通過/不通過代理服務器進行連接; · -Q [byetes]:限制下載文件的總大小最多不能超過多少,比如"-Q2k"表示不能超過2K 字節,"-Q3m"表示最多不能超過3M字節,如果數字后面什么都不加,就表示是以字節為單 位,比如"-Q200"表示最多不能超過200字節; · -nd:不下載目錄結構,把從服務器所有指定目錄下載的文件都堆到當前目錄里; · -x:與"-nd"設置剛好相反,創建完整的目錄結構,例如"wget -nd http://www.gnu.org"將創建在當前目錄下創建"www.gnu.org"子目錄,然后按照服務器 實際的目錄結構一級一級建下去,直到所有的文件都傳完為止; · -nH:不創建以目標主機域名為目錄名的目錄,將目標主機的目錄結構直接下到當前目 錄下; · --http-user=username · --http-passwd=password:如果Web服務器需要指定用戶名和口令,用這兩項來設定; · --proxy-user=username · --proxy-passwd=password:如果代理服務器需要輸入用戶名和口令,使用這兩個選項 ; · -r:在本機建立服務器端目錄結構; · -l [depth]:下載遠程服務器目錄結構的深度,例如"-l 5"下載目錄深度小於或者等 於5以內的目錄結構或者文件; · -m:做站點鏡像時的選項,如果你想做一個站點的鏡像,使用這個選項,它將自動設 定其他合適的選項以便於站點鏡像; · -np:只下載目標站點指定目錄及其子目錄的內容。這也是一個非常有用的選項,我們 假設某個人的個人主頁里面有一個指向這個站點其他人個人主頁的連接,而我們只想下載 這個人的個人主頁,如果不設置這個選項,甚至--有可能把整個站點給抓下來,這顯然是 我們通常不希望的; ü 如何設定wget所使用的代理服務器 wget可以使用用戶設置文件".wgetrc"來讀取很多設置,我們這里主要利用這個文件來是 設置代理服務器。使用者用什么用戶登錄,那么什么用戶主目錄下的".wgetrc"文件就起 作用。例如,"root"用戶如果想使用".wgetrc"來設置代理服務器,"/root/.wgert"就起 作用,下面給出一個".wge trc"文件的內容,讀者可以參照這個例子來編寫自己的"wgetrc"文件: http-proxy = 111.111.111.111:8080 ftp-proxy = 111.111.111.111:8080 這兩行的含義是,代理服務器IP地址為:111.111.111.111,端口號為:80。第一行指定 HTTP協議所使用的代理服務器,第二行指定FTP協議所使用的代理服務器。 第二篇: $ wget --help GNU Wget 1.9.1,非交互式的網絡文件下載工具。 用法: wget [選項]... [URL]... 長選項必須用的參數在使用短選項時也是必須的。 啟動: -V, --version 顯示 Wget 的版本並且退出。 -h, --help 打印此幫助。 -b, -background 啟動后進入后台操作。 -e, -execute=COMMAND 運行‘.wgetrc’形式的命令。 日志記錄及輸入文件: -o, --output-file=文件 將日志消息寫入到指定文件中。 -a, --append-output=文件 將日志消息追加到指定文件的末端。 -d, --debug 打印調試輸出。 -q, --quiet 安靜模式(不輸出信息)。 -v, --verbose 詳細輸出模式(默認)。 -nv, --non-verbose 關閉詳細輸出模式,但不進入安靜模式。 -i, --input-file=文件 下載從指定文件中找到的 URL。 -F, --force-html 以 HTML 方式處理輸入文件。 -B, --base=URL 使用 -F -i 文件選項時,在相對鏈接前添加指定的 URL。 下載: -t, --tries=次數 配置重試次數(0 表示無限)。 --retry-connrefused 即使拒絕連接也重試。 -O --output-document=文件 將數據寫入此文件中。 -nc, --no-clobber 不更改已經存在的文件,也不使用在文件名后 添加 .#(# 為數字)的方法寫入新的文件。 -c, --continue 繼續接收已下載了一部分的文件。 --progress=方式 選擇下載進度的表示方式。 -N, --timestamping 除非遠程文件較新,否則不再取回。 -S, --server-response 顯示服務器回應消息。 --spider 不下載任何數據。 -T, --timeout=秒數 配置讀取數據的超時時間 (秒數)。 -w, --wait=秒數 接收不同文件之間等待的秒數。 --waitretry=秒數 在每次重試之間稍等一段時間 (由 1 秒至指定的 秒數不等)。 --random-wait 接收不同文件之間稍等一段時間(由 0 秒至 2*WAIT 秒不等)。 -Y, --proxy=on/off 打開或關閉代理服務器。 -Q, --quota=大小 配置接收數據的限額大小。 --bind-address=地址 使用本機的指定地址 (主機名稱或 IP) 進行連接。 --limit-rate=速率 限制下載的速率。 --dns-cache=off 禁止查找存於高速緩存中的 DNS。 --restrict-file-names=OS 限制文件名中的字符為指定的 OS (操作系統) 所允許的字符。 目錄: -nd --no-directories 不創建目錄。 -x, --force-directories 強制創建目錄。 -nH, --no-host-directories 不創建含有遠程主機名稱的目錄。 -P, --directory-prefix=名稱 保存文件前先創建指定名稱的目錄。 --cut-dirs=數目 忽略遠程目錄中指定數目的目錄層。 HTTP 選項: --http-user=用戶 配置 http 用戶名。 --http-passwd=密碼 配置 http 用戶密碼。 -C, --cache=on/off (不)使用服務器中的高速緩存中的數據 (默認是使用的)。 -E, --html-extension 將所有 MIME 類型為 text/html 的文件都加上 .html 擴展文件名。 --ignore-length 忽略“Content-Length”文件頭字段。 --header=字符串 在文件頭中添加指定字符串。 --proxy-user=用戶 配置代理服務器用戶名。 --proxy-passwd=密碼 配置代理服務器用戶密碼。 --referer=URL 在 HTTP 請求中包含“Referer:URL”頭。 -s, --save-headers 將 HTTP 頭存入文件。 -U, --user-agent=AGENT 標志為 AGENT 而不是 Wget/VERSION。 --no-http-keep-alive 禁用 HTTP keep-alive(持久性連接)。 --cookies=off 禁用 cookie。 --load-cookies=文件 會話開始前由指定文件載入 cookie。 --save-cookies=文件 會話結束后將 cookie 保存至指定文件。 --post-data=字符串 使用 POST 方法,發送指定字符串。 --post-file=文件 使用 POST 方法,發送指定文件中的內容。 HTTPS (SSL) 選項: --sslcertfile=文件 可選的客戶段端證書。 --sslcertkey=密鑰文件 對此證書可選的“密鑰文件”。 --egd-file=文件 EGD socket 文件名。 --sslcadir=目錄 CA 散列表所在的目錄。 --sslcafile=文件 包含 CA 的文件。 --sslcerttype=0/1 Client-Cert 類型 0=PEM (默認) / 1=ASN1 (DER) --sslcheckcert=0/1 根據提供的 CA 檢查服務器的證書 --sslprotocol=0-3 選擇 SSL 協議;0=自動選擇, 1=SSLv2 2=SSLv3 3=TLSv1 FTP 選項: -nr, --dont-remove-listing 不刪除“.listing”文件。 -g, --glob=on/off 設置是否展開有通配符的文件名。 --passive-ftp 使用“被動”傳輸模式。 --retr-symlinks 在遞歸模式中,下載鏈接所指示的文件(連至目錄 則例外)。 遞歸下載: -r, --recursive 遞歸下載。 -l, --level=數字 最大遞歸深度(inf 或 0 表示無限)。 --delete-after 刪除下載后的文件。 -k, --convert-links 將絕對鏈接轉換為相對鏈接。 -K, --backup-converted 轉換文件 X 前先將其備份為 X.orig。 -m, --mirror 等效於 -r -N -l inf -nr 的選項。 -p, --page-requisites 下載所有顯示完整網頁所需的文件,例如圖像。 --strict-comments 打開對 HTML 備注的嚴格(SGML)處理選項。 遞歸下載時有關接受/拒絕的選項: -A, --accept=列表 接受的文件樣式列表,以逗號分隔。 -R, --reject=列表 排除的文件樣式列表,以逗號分隔。 -D, --domains=列表 接受的域列表,以逗號分隔。 --exclude-domains=列表 排除的域列表,以逗號分隔。 --follow-ftp 跟隨 HTML 文件中的 FTP 鏈接。 --follow-tags=列表 要跟隨的 HTML 標記,以逗號分隔。 -G, --ignore-tags=列表 要忽略的 HTML 標記,以逗號分隔。 -H, --span-hosts 遞歸時可進入其它主機。 -L, --relative 只跟隨相對鏈接。 -I, --include-directories=列表 要下載的目錄列表。 -X, --exclude-directories=列表 要排除的目錄列表。 -np, --no-parent 不搜索上層目錄。
下載文件:url
