http://hi.baidu.com/green_lizard/item/79118bb45ff6f0eb62388e9b
http://blog.sina.com.cn/s/blog_7a9c22c70101cvth.html
輸出=>0.081:0.272:0.779
|
清單 1 給出對一個流行的新聞站點執行 curl
命令的情況.輸出通常是 HTML 代碼,通過 -o
參數發送到/dev/null
.-s
參數去掉所有狀態信息.-w
參數讓 curl
寫出表 1 列出的計時器的狀態信息:
表 1. curl 使用的計時器
計時器 | 描述 |
---|---|
time_connect | 建立到服務器的 TCP 連接所用的時間 |
time_starttransfer | 在發出請求之后,Web 服務器返回數據的第一個字節所用的時間 |
time_total | 完成請求所用的時間 |
time_namelookup | DNS解析時間,從請求開始到DNS解析完畢所用時間(記得關掉 Linux 的 nscd 的服務測試) |
speed_download | 下載速度,單位-字節每秒。 |
這些計時器都相對於事務的起始時間,甚至要先於 Domain Name Service(DNS)查詢.因此,在發出請求之后,Web 服務器處理請求並開始發回數據所用的時間是 0.272 – 0.081 = 0.191 秒.客戶機從服務器下載數據所用的時間是 0.779 – 0.272 = 0.507 秒.
通過觀察 curl
數據及其隨時間變化的趨勢,可以很好地了解站點對用戶的響應性.以上變量會按CURL認為合適的格式輸出,輸出變量需要按照%{variable_name}的格式,如果需要輸出%,double一下即可,即%%,同時,\n是換行,\r是回車,\t是TAB。
當然,Web 站點不僅僅由頁面組成.它還有圖像、JavaScript 代碼、CSS 和 cookie 要處理.curl
很適合了解單一元素的響應時間,但是有時候需要了解整個頁面的裝載速度.
http://bbs.chinaunix.net/thread-3640561-1-1.html
監控站點首頁下載時間:
curl -o /dev/null -s -w ‘%{time_total}’ http://www.miotour.com
curl -o /dev/null -s -w ‘%{http_code}’ http://www.miotour.com
curl -o /dev/null -s -w %{http_code}:%{time_connect}:%{time_starttransfer}:%{time_total} http://www.miotour.com
結果:2.547
-s 靜默輸出;沒有-s的話就是下面的情況,這是在腳本等情況下不需要的信息。
監控首頁各項時間指標:
curl -o /dev/null -sw '%{http_code}:%{time_total}:%{time_connect}:%{time_starttransfer}\n' http://www.miotour.com
curl -o /dev/null -s -w ‘%{time_connect}:%{time_starttransfer}:%{time_total}\n’ http://www.miotour.com
結果: 0.244: 1.044: 2.672
時間指標解釋 :
time_connect 建立到服務器的 TCP 連接所用的時間
time_starttransfer 在發出請求之后,Web 服務器返回數據的第一個字節所用的時間
time_total 完成請求所用的時間
在發出請求之后,Web 服務器處理請求並開始發回數據所用的時間是
(time_starttransfer)1.044 - (time_connect)0.244 = 0.8 秒
客戶機從服務器下載數據所用的時間是
(time_total)2.672 - (time_starttransfer)1.044 = 1.682 秒
指定特定主機IP地址訪問網站
curl -x 61.135.169.105:80 http://www.baidu.com
curl -x 61.135.169.125:80 http://www.baidu.com
======================================
http://www.ttlsa.com/perl/get-response-tome/
獲取站點的各類響應時間
有時候為了測試網絡情況,需要返回每個階段的耗時時間,比如DNS解析耗時,建立連接所消耗的時間,從建立連接到准備傳輸所使用的時間,從建立連接到傳輸開始所使用的時間,整個過程耗時,下載的數據量,下載速度,上傳數據量,上傳速度等等。下面的腳本獲取以上信息:
CURL的資料參見: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
shell命令下也有相同的命令如下所示:
不解釋了,具體參見 man curl
如需轉載請注明出處:http://www.ttlsa.com/html/1465.html
http://digdeeply.org/archives/05102012.html
使用 cURL 獲取站點的各類響應時間 – dns解析時間,響應時間,傳輸時間
使用 cURL 獲取站點的各類響應時間 – dns解析時間,響應時間,傳輸時間等:
1
|
curl -o
/dev/null
-s -w %{http_code}:%{http_connect}:%{content_type}:%{time_namelookup}:%{time_redirect}:%{time_pretransfer}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download} digdeeply.org
|
這是一個本人博客站點執行 curl 命令的情況。輸出通常是 HTML 代碼,通過 -o 參數發送到 /dev/null。-s 參數去掉所有狀態信息。-w 參數讓 curl 輸出的計時器的狀態信息。
下邊對-w參數做個詳細的解釋,由我(DigDeeply)翻譯。有不對的地方請大家指出。(英文原文:http://curl.haxx.se/docs/manpage.html)
以下是可用的變量名:
-w, --write-out 以下變量會按CURL認為合適的格式輸出,輸出變量需要按照%{variable_name}的格式,如果需要輸出%,double一下即可,即%%,同時,\n是換行,\r是回車,\t是TAB。 url_effective The URL that was fetched last. This is most meaningful if you've told curl to follow location: headers. filename_effective The ultimate filename that curl writes out to. This is only meaningful if curl is told to write to a file with the --remote-name or --output option. It's most useful in combination with the --remote-header-name option. (Added in 7.25.1) http_code http狀態碼,如200成功,301轉向,404未找到,500服務器錯誤等。(The numerical response code that was found in the last retrieved HTTP(S) or FTP(s) transfer. In 7.18.2 the alias response_code was added to show the same info.) http_connect The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4) time_total 總時間,按秒計。精確到小數點后三位。 (The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.) time_namelookup DNS解析時間,從請求開始到DNS解析完畢所用時間。(The time, in seconds, it took from the start until the name resolving was completed.) time_connect 連接時間,從開始到建立TCP連接完成所用時間,包括前邊DNS解析時間,如果需要單純的得到連接時間,用這個time_connect時間減去前邊time_namelookup時間。以下同理,不再贅述。(The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.) time_appconnect 連接建立完成時間,如SSL/SSH等建立連接或者完成三次握手時間。(The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0)) time_pretransfer 從開始到准備傳輸的時間。(The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.) time_redirect 重定向時間,包括到最后一次傳輸前的幾次重定向的DNS解析,連接,預傳輸,傳輸時間。(The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3)) time_starttransfer 開始傳輸時間。在發出請求之后,Web 服務器返回數據的第一個字節所用的時間(The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result.) size_download 下載大小。(The total amount of bytes that were downloaded.) size_upload 上傳大小。(The total amount of bytes that were uploaded.) size_header 下載的header的大小(The total amount of bytes of the downloaded headers.) size_request 請求的大小。(The total amount of bytes that were sent in the HTTP request.) speed_download 下載速度,單位-字節每秒。(The average download speed that curl measured for the complete download. Bytes per second.) speed_upload 上傳速度,單位-字節每秒。(The average upload speed that curl measured for the complete upload. Bytes per second.) content_type 就是content-Type,不用多說了,這是一個訪問我博客首頁返回的結果示例(text/html; charset=UTF-8);(The Content-Type of the requested document, if there was any.) num_connects Number of new connects made in the recent transfer. (Added in 7.12.3) num_redirects Number of redirects that were followed in the request. (Added in 7.12.3) redirect_url When a HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect would take you to. (Added in 7.18.2) ftp_entry_path The initial path libcurl ended up in when logging on to the remote FTP server. (Added in 7.15.4) ssl_verify_result ssl認證結果,返回0表示認證成功。( The result of the SSL peer certificate verification that was requested. 0 means the verification was successful. (Added in 7.19.0)) 若多次使用-w參數,按最后一個的格式輸出。If this option is used several times, the last one will be used.
轉載請注明:來自:DigDeeply’s Blog–使用 cURL 獲取站點的各類響應時間 – dns解析時間,響應時間,傳輸時間
==========================
http://blog.csdn.net/ithomer/article/details/7626929
Linux抓取網頁,簡單方法是直接通過 curl 或 wget 兩種命令。
curl 和 wget 命令,目前已經支持Linux和Windows平台,后續將介紹。
curl 和 wget支持協議
curl 支持 http,https,ftp,ftps,scp,telnet等網絡協議,詳見手冊 man curl
wget支持 http,https,ftp網絡協議,詳見手冊man wget
curl 和 wget下載安裝
1、Ubuntu平台
wget 命令安裝: sudo apt-get install wget (普通用戶登錄,需輸入密碼; root賬戶登錄,無需輸入密碼)
curl 命令安裝: sudo apt-get install curl (同 wget)
2、Windows平台
wget 下載地址:wget for Windows
curl 下載地址:curl Download
wget 和 curl 打包下載地址:Windows平台下的wget和curl工具包
Windows平台下,curl下載解壓后,直接是curl.exe格式,拷貝到系統命令目錄下 C:\Windows\System32 即可
Windows平台下,wget下載解壓后,是wget-1.11.4-1-setup.exe格式,需要安裝;安裝后,在環境變量 - 系統變量 - Path 中添加其安裝目錄即可
curl 和 wget抓取實例
抓取網頁,主要有url 網址和proxy代理兩種方式,下面以抓取“百度”首頁為例,分別介紹
1、 url 網址方式抓取
(1)curl下載百度首頁內容,保存在baidu_html文件中
curl http://www.baidu.com/ -o baidu_html
(2)wget下載百度首頁內容,保存在baidu_html文件中
wget http://www.baidu.com/ -O baidu_html2
有的時候,由於網速/數據丟包/服務器宕機/等原因,導致暫時無法成功下載網頁
這時,可能就需要多次嘗試發送連接,請求服務器的響應;如果多次仍無響應,則可以確認服務器出問題了
(1)curl多次嘗試連接
curl --retry 10 --retry-delay 60 --retry-max-time 60 http://www.baidu.com/ -o baidu_html
注: --retry表示重試次數; --retry-delay表示兩次重試之間的時間間隔(秒為單位); --retry-max-time表示在此最大時間內只容許重試一次(一般與--retry-delay相同)
(2)wget多次嘗試連接
wget -t 10 -w 60 -T 30 http://www.baidu.com/ -O baidu_html2
注:-t(--tries)表示重試次數; -w表示兩次重試之間的時間間隔(秒為單位); -T表示連接超時時間,如果超時則連接不成功,繼續嘗試下一次連接
附: curl 判斷服務器是否響應,還可以通過一段時間內下載獲取的字節量來間接判斷,命令格式如下:
curl -y 60 -Y 1 -m 60 http://www.baidu.com/ -o baidu_html
注:-y表示測試網速的時間; -Y表示-y這段時間下載的字節量(byte為單位); -m表示容許請求連接的最大時間,超過則連接自動斷掉放棄連接
2、 proxy代理方式抓取
proxy代理下載,是通過連接一台中間服務器間接下載url網頁的過程,不是url直接連接網站服務器下載
兩個著名的免費代理網站:
freeproxylists.net(全球數十個國家的免費代理,每日都更新)
xroxy.com(通過設置端口類型、代理類型、國家名稱進行篩選)
在freeproxylists.net網站,選擇一台中國的免費代理服務器為例,來介紹proxy代理抓取網頁:
218.107.21.252:8080(ip為218.107.21.252;port為8080,中間以冒號“:”隔開,組成一個套接字)
(1)curl 通過代理抓取百度首頁
curl -x 218.107.21.252:8080 -o aaaaa http://www.baidu.com(port 常見有80,8080,8086,8888,3128等,默認為80)
注:-x表示代理服務器(ip:port),即curl先連接到代理服務器218.107.21.252:8080,然后再通過218.107.21.252:8080下載百度首頁,最后218.107.21.252:8080把下載的百度首頁傳給curl至本地(curl不是直接連接百度服務器下載首頁的,而是通過一個中介代理來完成)
(2)wget 通過代理抓取百度首頁
wget通過代理下載,跟curl不太一樣,需要首先設置代理服務器的http_proxy=ip:port
以ubuntu為例,在當前用戶目錄(cd ~),新建一個wget配置文件(.wgetrc),輸入代理配置:
http_proxy=218.107.21.252:8080
然后再輸入wget抓取網頁的命令:
wget http://www.baidu.com -O baidu_html2
代理下載截圖:
=======================
抓取的百度首頁數據(截圖):
其它命令參數用法,同url網址方式,在此不再贅述
ftp協議、迭代子目錄等更多的curl 和 wget用法,可以man查看幫助手冊
知識拓展:
在國內,由於某種原因一般難以直接訪問國外某些敏感網站,需要通過 VPN 或 代理服務器才能訪問
如果校園網和教育網有IPv6,則可以通過sixxs.org免費代理訪問facebook、twitter、六維空間等網站
其實,除了VPN 和 IPv6+sixxs.org代理方式外,普通用戶還是有其它途徑訪問到國外網站
下面介紹兩個著名的免費代理網站:
freeproxylists.net(全球數十個國家的免費代理,每日都更新)
xroxy.com(通過設置端口類型、代理類型、國家名稱進行篩選)
curl 項目實例
使用curl + freeproxylists.net免費代理,實現了全球12國家google play游戲排名的網頁抓取以及趨勢圖查詢(抓取網頁模塊全部使用Shell編寫,核心代碼約1000行)
游戲排名趨勢圖請見我先前的博客:JFreeChart項目實例
=======================================================
https://wen.lu/#q=curl+wget+%E4%B8%8B%E8%BD%BD%E9%80%9F%E5%BA%A6+
http://www.cnblogs.com/kudosharry/articles/2335880.html
curl vs Wget
CURL
-
基於libcurl庫,libcurl是一個穩定的跨平台的類庫,任何人可以免費使用其API進行開發。CURL繼承了libcurl庫的優良設計,這是它能成為優秀的命令行工具的重要原因。
- 管道(Pipes). CURL不僅僅遵循 傳統UNIXstyle, 它在對輸入和輸出做更多的處理,貫徹了 "everything is a pipe" 的設計思想。
- 返回值(Return codes). curl為一系列應用返回多種結果(錯誤),適用於很多情況。
- 單點傳送 curl僅僅單點傳送數據。它只會傳送用戶指定的URLS,並不包含任何遞歸下載的邏輯,也不對html進行任何解析。
- 多協議支持. curl 支持的協議有: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP 和 RTSP 在寫這篇文章時,Wget僅僅支持 HTTP, HTTPS 和 FTP.
- 適應更多的平台: curl比wget運行在更多的平台上面,雖然curl設計當初並沒有打算這樣。比如: OS/400, TPF 和其他很多非UNIX的平台。
- 更強大的SSL庫. curl能應用於多個不同的 SSL/TLS 庫, 並提供了更多的可控性和對協議的廣泛支持。
- curl支持更多的 HTTP 認證方式
- 雙向通信. curl 提供了上傳能力,Wget僅僅支持HTTP post 方式
- HTTP multipart/form-data 的發送能力, 這使得用戶可以進行HTTP上傳,模擬瀏覽器的行為和HTTP認證等,提供了更多操作的可能。
- 壓縮. curl 支持GZIP和 inflate Content-Encoding 並且自動進行解壓縮操作。
Wget
- Wget 僅僅支持命令行方式運行. 沒有類庫,不提供API等。
- 遞歸! Wget 與CURL的最大區別也是Wget的最大的優勢是可以進行遞歸的下載,可以一次下載一個HTML頁面 或者ftp列表中的所有內容。
- 更久的歷史. Wget 可以追溯到 1995年,curl則要在 1997年之后出現.
- 參與開發的人員相對較. 我打賭,任何參與這兩個項目的人都能感覺到這一點。
- HTTP 1.0. Wget 仍然僅僅使用 HTTP 1.0,但是它一直工作很好,並且對於最終用戶沒有任何影響。curl在2001年三月的時候就開始支持 HTTP 1.1 了(仍然保留對 1.0 請求的支持).
- GPL. Wget 100% 遵循 GPL v3 協議,. curl 則是 MIT licensed.
- GNU. Wget 是 GNU 項目的一部分 並且所有的版權歸於 FSF. curl項目則是獨立的,獨立於任何組織,所有的版權屬於Daniel。(哇!)
- Wget 不需要任何額外參數 就能從URL下載文件到本地, 而curl需要至少 -o 或者 -O這兩個參數.
在對網站內容是否更新進行測試時,最常用的兩個工具就是wget和curl。不過兩個工具之間還是有一些小區別,甚至很可能影響到測試結論的。記錄一下:
1、在查看response-header的時候,我們習慣用的是wget -S和curl -I,但是:wget -S的時候,發送的是GET請求,而curl -I發送的是HEAD請求。如果測試url此時沒有被緩存過,直接使用curl -I進行測試,永遠都會返回MISS狀態。所以最好先wget一次,再用curl -I。
2、在查看下載速度時,常常發現wget和curl耗時差距較大。因為wget默認使用HTTP/1.0協議,不顯式指定 –header=”Accept-Encoding: gzip,deflate”的情況下,傳輸的是未經壓縮的文件。而curl使用HTTP/1.1協議,默認接受就是壓縮格式。
3、在測試緩存層配置時,有時發現wget可以HIT的東西,curl卻始終MISS。對此可以開啟debug模式進行觀察跟蹤。
wget自帶有-d參數,直接顯示request-header;curl只有-D參數,在采用GET請求的時候,將response-header另存 成文件,所以只好在squid上debug請求處理流程(當然也可以去網絡抓包),結果發現,curl的GET請求,都帶有”Pragma: no-cache”!而wget需要另行指定–no-cache才會。按照squid的默認配置,對client_no_cache是透傳的,所以 curl永遠MISS,除非squid上配置了ignore-reload/reload-into-ims兩個參數,才可能強制HIT。
首先申明標題黨!
前幾天,有一張圖片訪問404(從第三方站點拉去),后來查到原因是下載超過5s(wget帶了超時參數--timeout=5),所以下載失敗。但是直接訪問原圖又是非常快,基本感覺不到延時。開始懷疑是服務器網絡原因,用host獲取該域名的ip地址,無法ping通。
初步結論是:網絡原因,無法ping通
服務器可能會設置禁ping,於是我就用wget不帶超時下載了一次,發現確實可以下載,只是耗時非常嚴重,如圖:
花了20s,才將此圖完整下下來。換成curl來下載此圖,結果如圖:
結果就很明顯,curl僅用1s的時間下載此圖,而wget卻用了20s才做完相同的事兒。我這並不是說curl的性能優於wget啊,換成其他網站url,時間消耗就差不多。那到底是什么原因才導致了如此巨大的差異了,勾起了我的好奇心。
用strace、tcpdump分別跟蹤了wget和curl,摘取了相對核心的地方來做分析。
wget的strace結果
由於strace的內容比較多比較雜,為了方便分析摘出了比較核心的幾處
- 11:52:37.877356 execve("/usr/bin/wget", ["wget", "http://newpic.jxnews.com.cn/0/11"], [/* 30 vars */]) = 0
- 11:52:37.899984 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
- 11:52:37.900043 connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.55.21.254")}, 28) = 0
- 11:52:37.900114 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
- 11:52:37.900165 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
- 11:52:37.900215 poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
- 11:52:37.900284 sendto(3, "\353J\1\0\0\1\0\0\0\0\0\0\6newpic\6jxnews\3com\2c"..., 38, MSG_NOSIGNAL, NULL, 0) = 38
- 11:52:37.900773 poll([{fd=3, events=POLLIN}], 1, 5000) = 0 (Timeout)
- 11:52:47.900462 poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
- 11:52:47.900529 sendto(3, "\353J\1\0\0\1\0\0\0\0\0\0\6newpic\6jxnews\3com\2c"..., 38, MSG_NOSIGNAL, NULL, 0) = 38
- 11:52:47.900606 poll([{fd=3, events=POLLIN}], 1, 5000) = 0 (Timeout)
- 11:52:57.900996 close(3) = 0
- 11:52:57.901134 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
- 11:52:57.901192 connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.55.21.254")}, 28) = 0
- 11:52:57.901270 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
- 11:52:57.901322 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
- 11:52:57.901374 poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
- 11:52:57.901436 sendto(3, "c\237\1\0\0\1\0\0\0\0\0\0\6newpic\6jxnews\3com\2c"..., 50, MSG_NOSIGNAL, NULL, 0) = 50
- 11:52:57.901646 poll([{fd=3, events=POLLIN}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
- 11:52:57.902350 ioctl(3, FIONREAD, [125]) = 0
- 11:52:57.902421 recvfrom(3, "c\237\201\203\0\1\0\0\0\1\0\0\6newpic\6jxnews\3com\2c"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.55.21.254")}, [16]) = 125
- 11:52:57.902516 close(3) = 0
- 11:52:57.902592 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
- 11:52:57.902647 connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.55.21.254")}, 28) = 0
- 11:52:57.902707 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
- 11:52:57.902757 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
- 11:52:57.902808 poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
- 11:52:57.902881 sendto(3, "\343\25\1\0\0\1\0\0\0\0\0\0\6newpic\6jxnews\3com\2c"..., 38, MSG_NOSIGNAL, NULL, 0) = 38
- 11:52:57.903027 poll([{fd=3, events=POLLIN}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
- 11:52:57.983323 ioctl(3, FIONREAD, [92]) = 0
- 11:52:57.983394 recvfrom(3, "\343\25\201\200\0\1\0\1\0\2\0\0\6newpic\6jxnews\3com\2c"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.55.21.254")}, [16]) = 92
- 11:52:57.983482 close(3) = 0
- 11:52:57.983584 write(2, "59.52.28.153", 12) = 12
- 11:52:57.983707 write(2, "\n", 1) = 1
- 11:52:57.983825 open("/usr/share/locale/zh.GBK/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
- 11:52:57.983905 open("/usr/share/locale/zh/LC_MESSAGES/wget.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
- 11:52:57.983979 write(2, "Connecting to newpic.jxnews.com."..., 55) = 55
- 11:52:57.984073 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
- 11:52:57.984139 connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("59.52.28.153")}, 16) = 0
- 11:52:58.045641 write(2, "\322\321\301\254\275\323\241\243\n", 9) = 9
- 11:52:58.045760 select(4, NULL, [3], NULL, {900, 0}) = 1 (out [3], left {900, 0})
- 11:52:58.045832 write(3, "GET /0/11/84/34/11843462_991618."..., 155) = 155
在11:52:37這一刻,執行wget命令。第一個較為重要的動作是做dns解析,向域名服務器10.55.21.254發起了兩次數據包的長度是38字節查詢請求,得到兩次timeout,在11:52:57正式關閉了請求。
系統嘗試向dns服務器10.55.21.254發送長度為50字節的數據包的查詢請求,並獲得返回結果(這里無法知道獲知返回結果)。
系統在獲得返回結果后,第四次向10.55.21.254發送請求,獲得返回結果后,得到url的ip地址,發起了http請求。
通過已經分析,可以得到幾個結論:
1、對域名解析方式上的差異導致wget和curl的耗時差別巨大
2、第三次改變數據包的查詢,雖然獲取得了返回,但並沒有獲取域名的ip
wget的tcpdump結果
tcpdump的結果圖:
相對於strace的日志,tcpdump的就比較干凈,為了方便分析,還是摘除了關鍵部分
- 11:52:37.900351 IP wapcms-169.54429 > dns.domain: 60234+ AAAA? newpic.jxnews.com.cn. (38)
- 11:52:47.900568 IP wapcms-169.54429 > dns.domain: 60234+ AAAA? newpic.jxnews.com.cn. (38)
- 11:52:57.901476 IP wapcms-169.46106 > dns.domain: 25503+ AAAA? newpic.jxnews.com.cn.localdomain. (50)
- 11:52:57.902233 IP dns.domain > wapcms-169.46106: 25503 NXDomain 0/1/0 (125)
- 11:52:57.902924 IP wapcms-169.58634 > dns.domain: 58133+ A? newpic.jxnews.com.cn. (38)
- 11:52:57.983135 IP dns.domain > wapcms-169.58634: 58133 1/2/0 A 59.52.28.153 (92)
很清晰的與strace的結果對應上了,兩次38字節的數據包timeout,一次50字節的數據包,獲得返回
NXDomain 0/1/0 (125),一次38字節的請求獲得域名的ip地址:59.52.28.153
curl的strace結果
- execve("/usr/bin/curl", ["curl", "http://newpic.jxnews.com.cn/0/11", "-o", "1.jpg"], [/* 31 vars */]) = 0
- = 0
- socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
- connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.55.21.254")}, 28) = 0
- fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
- fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
- poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
- sendto(3, "\370T\1\0\0\1\0\0\0\0\0\0\6newpic\6jxnews\3com\2c"..., 38, MSG_NOSIGNAL, NULL, 0) = 38
- poll([{fd=3, events=POLLIN}], 1, 5000) = 1 ([{fd=3, revents=POLLIN}])
- ioctl(3, FIONREAD, [92]) = 0
- recvfrom(3, "\370T\201\200\0\1\0\1\0\2\0\0\6newpic\6jxnews\3com\2c"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("10.55.21.254")}, [16]) = 92
- close(3)
- = 0
- socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
- fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
- fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
- connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("120.203.216.133")}, 16) = -1 EINPROGRESS (Operation now in progress)
- poll([{fd=3, events=POLLOUT}], 1, 300000) = 1 ([{fd=3, revents=POLLOUT}])
- getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
- sendto(3, "GET /0/11/84/34/11843462_991618."..., 194, MSG_NOSIGNAL, NULL, 0) = 194
很明顯的發現,curl通過一次dns查詢就獲取了url的ip地址,然后就發起http請求。
curl的tcpdump結果
- 15:19:39.744520 IP wapcms-169.48990 > dns.domain: 63572+ A? newpic.jxnews.com.cn. (38)
- 15:19:39.744905 IP wapcms-169.38502 > dns.domain: 13836+ PTR? 254.21.55.10.in-addr.arpa. (43)
- 15:19:39.745626 IP dns.domain > wapcms-169.38502: 13836* 1/1/0 (86)
- 15:19:39.793797 IP dns.domain > wapcms-169.48990: 63572 1/2/0 A 120.203.216.133 (92)
- 15:19:39.793890 IP wapcms-169.31975 > dns.domain: 54867+ PTR? 133.216.203.120.in-addr.arpa. (46)
- 15:19:39.848460 IP dns.domain > wapcms-169.31975: 54867 NXDomain 0/1/0 (102)
從上面基本上可以得到結論,wget與curl在域名解析上有很大的不同。
通過查閱dns協議和tcpdump的輸出數據格式得到結論是:
wget兼容IPv6,而curl不兼容,該url的dns解析20s的時間發生在解析IPv6上
引申:
host命令兼容IPv6 dig不兼容 (均為不帶任何附加參數)
追加證明:
wget強制使用IPv4進行dns的結果如圖:
注:
dns協議見附件,相關附帶知識如下:
tcpdupm中dns數據包格式
域名服務請求的格式是
src>dst:idop?flagsqtypeqclassname(len)
h2opolo.1538>helios.domain:3+A?ucbvax.berkeley.edu.(37)
主機h2opolo訪問helios上的域名服務,詢問和ucbvax.berkeley.edu.關聯的地址記錄(qtype=A).查詢號是 `3'.` +'表明設置了遞歸請求標志.查詢長度是37字節,不包括UDP和IP頭.查詢操作是普通的Query操作,因此op域可以忽略.如果op設置成其他什么 東西,它應該顯示在`3'和`+'之間.類似的,qclass是普通的C_IN類型,也被忽略了.其他類型的qclass應該在`A'后面顯示.
Tcpdump 會檢查一些不規則情況,相應的結果作為補充域放在方括號內:如果某個查詢包含回答,名字服務或管理機構部分,就把ancount,nscount,或 arcount顯示成`[na]',`[nn]'或`[nau]',這里的n代表相應的數量.如果在第二和第三字節中,任何一個回答位(AA,RA或 rcode)或任何一個`必須為零'的位被置位,就顯示`[b2&3=x]',這里的x是報頭第二和第三字節的16進制數.
UDP名字服務回答
名字服務回答的格式是
src>dst:idoprcodeflagsa/n/autypeclassdata(len)
helios.domain>h2opolo.1538:33/3/7A128.32.137.3(273)
helios.domain>h2opolo.1537:2NXDomain*0/1/0(97)
第一個例子里,helios回答了h2opolo發出的標識為3的詢問,一共是3個回答記錄,3個名字服務記錄和7個管理結構記錄.第一個回答紀錄的類型是 A(地址),數據是internet地址128.32.137.3.回答的全長為273字節,不包括UDP和IP報頭.作為A記錄的class (C_IN)可以忽略op(詢問)和rcode(NoError).
在第二個例子里,helios對標識為2的詢問作出域名不存在(NXDomain)的回答,沒有回答記錄,一個名字服務記錄,而且沒有管理結構.
`*'表明設置了權威回答(authoritativeanswer).由於沒有回答記錄,這里就不顯示type,class和data.
其他標志字符可以顯示為`-'(沒有設置遞歸有效(RA))和`|'(設置消息截短(TC)).如果`問題'部分沒有有效的內容,就顯示`[nq]'.
注意名字服務的詢問和回答一般說來比較大,68字節的snaplen可能無法捕捉到足夠的報文內容.如果你的確在研究名字服務的情況,可以使用-s選項增大捕捉緩沖區.`-s128'應該效果不錯了.
IPv6的正向解析與反向解析
a. 正向解析
IPv4的地址正向解析的資源記錄是“A”記錄。IPv6地址的正向解析目前有兩種資源記錄,即,“AAAA”和“A6”記錄。其中, “AAAA”較早提出<4>,它是對“A”記錄的簡單擴展,由於IP地址由32位擴展到128位,擴大了4倍,所以資源記錄由“A”擴大成4 個“A”。“AAAA”用來表示域名和IPv6地址的對應關系,並不支持地址的層次性。
“A6”在RFC2874<5>中提出,它是把一個IPv6地址與多個“A6”記錄建立聯系,每個“A6”記錄都只包含了IPv6地址的一部分,結合后拼裝成一個完整的IPv6地址。“A6”記錄支持一些“AAAA”所不具備的新特性,如地址聚合,地址更改(Renumber)等。
首先,“A6”記錄方式根據TLA、NLA和SLA的分配層次把128位的IPv6的地址分解成為若干級的地址前綴和地址后綴,構成了一個地址鏈。每個地址前綴和地址后綴都是地址鏈上的一環,一個完整的地址鏈就組成一個IPv6地址。這種思想符合IPv6地址的層次結構,從而支持地址聚合。
其次,用戶在改變ISP時,要隨ISP改變而改變其擁有的IPv6地址。如果手工修改用戶子網中所有在DNS中注冊的地址,是一件非常繁瑣的事情。而在用“A6”記錄表示的地址鏈中,只要改變地址前綴對應的ISP名字即可,可以大大減少DNS中資源記錄的修改。並且在地址分配層次中越靠近底層,所需要改動的越少。
b. 反向解析
IPv6反向解析的記錄和IPv4一樣,是“PTR”,但地址表示形式有兩種。一種是用 “.”分隔的半字節16進制數字格式(Nibble Format),低位地址在前,高位地址在后,域后綴是“IP6.INT.”。另一種是二進制串(Bit-string)格式,以“\<”開頭, 16進制地址(無分隔符,高位在前,低位在后)居中,地址后加“>”,域后綴是“IP6.ARPA.”。半字節16進制數字格式與“AAAA”對應,是對IPv4的簡單擴展。二進制串格式與“A6”記錄對應,地址也象“A6”一樣,可以分成多級地址鏈表示,每一級的授權用“DNAME”記錄。和 “A6”一樣,二進制串格式也支持地址層次特性。
總之,以地址鏈形式表示的IPv6地址體現了地址的層次性,支持地址聚合和地址更改。但是,由於一次完整的地址解析分成多個步驟進行,需要按照地址的分配層次關系到不同的DNS服務器進行查詢。所有的查詢都成功才能得到完整的解析結果。這勢必會延長解析時間,出錯的機會也增加。因此,需要進一步改進DNS地址鏈功能,提高域名解析的速度才能為用戶提供理想的服務。
本文出自 “邱凱的技術博客” 博客,請務必保留此出處http://xdebug.blog.51cto.com/1135229/1130815
curl常用命令
1.下載單個文件,默認將輸出打印到標准輸出中(STDOUT)中
curl http://img.xxx.com
2.通過-o/-O選項保存下載的文件到指定的文件中:
-o:將文件保存為命令行中指定的文件名的文件中
curl http://img.xxx.com/2014-09-27/1411874364337558.jpg -o test.jpg
-O:使用URL中默認的文件名保存文件到本地
curl -O http://img.xxx.com/2014-09-27/1411874364337558.jpg
同時獲取多個文件
1 curl -O URL1 -O URL2
若同時從同一站點下載多個文件時,curl會嘗試重用鏈接(connection)。
curl -O http://img.xxx.com/2014-09-27/1411874364337558.jpg -O http://img.xxx.com/2014-09-27/1411874364337559.jpg
斷點續傳
通過使用-C選項可對大文件使用斷點續傳功能,如:
復制代碼
1 # 當文件在下載完成之前結束該進程
2 $ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
3 ############## 20.1%
4
5 # 通過添加-C選項繼續對該文件進行下載,已經下載過的文件不會被重新下載
6 curl -C – -O http://www.gnu.org/software/gettext/manual/gettext.html
7 ############### 21.1%
復制代碼
對CURL使用網絡限速
通過–limit-rate選項對CURL的最大網絡使用進行限制
1 # 下載速度最大不會超過1000B/second
2
3 curl –limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html
下載指定時間內修改過的文件
當下載一個文件時,可對該文件的最后修改日期進行判斷,如果該文件在指定日期內修改過,就進行下載,否則不下載。
該功能可通過使用-z選項來實現:
1 # 若yy.html文件在2011/12/21之后有過更新才會進行下載
2 curl -z 21-Dec-11 http://www.example.com/yy.html
CURL授權
在訪問需要授權的頁面時,可通過-u選項提供用戶名和密碼進行授權
1 curl -u username:password URL
2
3 # 通常的做法是在命令行只輸入用戶名,之后會提示輸入密碼,這樣可以保證在查看歷史記錄時不會將密碼泄露
4 curl -u username URL
從FTP服務器下載文件
CURL同樣支持FTP下載,若在url中指定的是某個文件路徑而非具體的某個要下載的文件名,CURL則會列出該目錄下的所有文件名而並非下載該目錄下的所有文件
1 # 列出public_html下的所有文件夾和文件
2 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
3
4 # 下載xss.php文件
5 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php
上傳文件到FTP服務器
通過 -T 選項可將指定的本地文件上傳到FTP服務器上
復制代碼
# 將myfile.txt文件上傳到服務器
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
# 同時上傳多個文件
curl -u ftpuser:ftppass -T “{file1,file2}” ftp://ftp.testserver.com
# 從標准輸入獲取內容保存到服務器指定的文件中
curl -u ftpuser:ftppass -T – ftp://ftp.testserver.com/myfile_1.txt
復制代碼
獲取更多信息
通過使用 -v 和 -trace獲取更多的鏈接信息
通過字典查詢單詞
復制代碼
1 # 查詢bash單詞的含義
2 curl dict://dict.org/d:bash
3
4 # 列出所有可用詞典
5 curl dict://dict.org/show:db
6
7 # 在foldoc詞典中查詢bash單詞的含義
8 curl dict://dict.org/d:bash:foldoc
復制代碼
為CURL設置代理
-x 選項可以為CURL添加代理功能
1 # 指定代理主機和端口
2 curl -x proxysever.test.com:3128 http://google.co.in
其他網站整理
保存與使用網站cookie信息
1 # 將網站的cookies信息保存到sugarcookies文件中
2 curl -D sugarcookies http://localhost/sugarcrm/index.php
3
4 # 使用上次保存的cookie信息
5 curl -b sugarcookies http://localhost/sugarcrm/index.php
傳遞請求數據
默認curl使用GET方式請求數據,這種方式下直接通過URL傳遞數據
可以通過 –data/-d 方式指定使用POST方式傳遞數據
復制代碼
1 # GET
2 curl -u username https://api.github.com/user?access_token=XXXXXXXXXX
3
4 # POST
5 curl -u username –data “param1=value1¶m2=value” https://api.github.com
6
7 # 也可以指定一個文件,將該文件中的內容當作數據傳遞給服務器端
8 curl –data @filename https://github.api.com/authorizations
復制代碼
注:默認情況下,通過POST方式傳遞過去的數據中若有特殊字符,首先需要將特殊字符轉義在傳遞給服務器端,如value值中包含有空格,則需要先將空格轉換成%20,如:
1 curl -d “value%201″ http://hostname.com
在新版本的CURL中,提供了新的選項 –data-urlencode,通過該選項提供的參數會自動轉義特殊字符。
1 curl –data-urlencode “value 1″ http://hostname.com
除了使用GET和POST協議外,還可以通過 -X 選項指定其它協議,如:
1 curl -I -X DELETE https://api.github.cim
上傳文件
1 curl –form “fileupload=@filename.txt” http://hostname/resource
原文地址:http://www.cnblogs.com/gbyukg/p/3326825.html
———————————————————————————
使用curl / wget命令上傳下載FTP
curl可以在shell下輕松上傳下載ftp上的文件,相比ftp命令更具有優勢,因為它能在單命令條件下,下載或者上傳一個ftp文件,甚至可以刪除文件。
下面看實例:
1、列出ftp服務器上的目錄列表:
curl ftp://www.quany.info/ –user name:passwd
curl ftp://www.quany.info/ –u name:passwd#簡潔寫法
curl ftp://name:passwd@www.quany.info #簡潔寫法2
2、只列出目錄,不顯示進度條
curl ftp://www.quany.info –u name:passwd-s
3、下載一個文件:
curl ftp://www.quany.info/size.zip –u name:passwd-o size.zip
4、上載一個文件:
curl –u name:passwd-T size.mp3 ftp://www.quany.info/mp3/
5、從服務器上刪除文件(使用curl傳遞ftp協議的DELE命令):
curl –u name:passwdftp://www.quany.info/ -X ‘DELE mp3/size.mp3′
6、另外curl不支持遞歸下載,不過可以用數組方式下載文件,比如我們要下載1-10.gif連續命名的文件:
curl –u name:passwdftp://www.quany.info/img/[1-10].gif –O #O字母大寫
7、要連續下載多個文件:
curl –u name:passwdftp://www.quany.info/img/[one,two,three].jpg –O #O字母大寫
8、wget下載文件:
用戶賬戶:quany
用戶密碼:123456
ftp下載
wget ftp://quany:123456@www.quany.info/xxx.zip
http下載
wget –http-user=quany –http-passwd=123456 http://www.quany.info/xxx.zip
9、wget參數:
wget的參數較多,但大部分應用只需要如下幾個常用的參數:
-r 遞歸;對於HTTP主機,wget首先下載URL指定的文件,然后(如果該文件是一個HTML文檔的話)遞歸下載該文件所引用(超級連接)的所有文件(遞歸深度由參數-l指定)。對FTP主機,該參數意味着要下載URL指定的目錄中的所有文件,遞歸方法與HTTP主機類似。
-N 時間戳:該參數指定wget只下載更新的文件,也就是說,與本地目錄中的對應文件的長度和最后修改日期一樣的文件將不被下載。
-m 鏡像:相當於同時使用-r和-N參數。
-l 設置遞歸級數;默認為5。-l1相當於不遞歸;-l0為無窮遞歸;注意,當遞歸深度增加時,文件數量將呈指數級增長。
-t 設置重試次數。當連接中斷(或超時)時,wget將試圖重新連接。如果指定-t0,則重試次數設為無窮多。
-c 指定斷點續傳功能。實際上,wget默認具有斷點續傳功能,只有當你使用別的ftp工具下載了某一文件的一部分,並希望wget接着完成此工作的時候,才需要指定此參數。
使用舉例:
wget -m -l4 -t0 http://www.quany.info/
將在本地硬盤建立http://www.quany.info/的鏡像,鏡像文件存入當前目錄下一個名為www.quany.info的子目錄中(你也可以使用-nH參數指定不建立該子目錄,而直接在當前目錄下建立鏡像的目錄結構),遞歸深度為4,重試次數為無窮(若連接出現問題,wget將堅韌不拔地永遠重試下去,知道任務完成!)
另外一些使用頻率稍低的參數如下:
-A acclist / -R rejlist:
這兩個參數用於指定wget接受或排除的文件擴展名,多個名稱之間用逗號隔開。例如,假設我們不想下載MPEG視頻影像文件和.AU聲音文件,可使用如下參數:
-R mpg,mpeg,au
其它參數還有:
-L 只擴展相對連接,該參數對於抓取指定站點很有用,可以避免向宿主主機的其他目錄擴散。例如,某個人網站地址為:http://www.quany.info/~ppfl/,使用如下命令行:
wget -L http://www.quany.info/~ppfl/
則只提取該個人網站,而不涉及主機www.quany.info上的其他目錄。
-k 轉換連接:HTML文件存盤時,將其中的非相對連接轉換成為相對連接。
-X 在下載FTP主機上的文件時,排除若干指定的目錄
另外,下面參數用於設置wget的工作界面:
-v 設置wget輸出詳細的工作信息。
-q 設置wget不輸出任何信息。
原文件:http://www.cnblogs.com/mfryf/p/3901327.html
=============
http://liangfm117.blog.163.com/blog/static/6913364420132282050624/
http://blog.chinaunix.net/uid-28671666-id-3502208.html
http://blog.51yip.com/linux/1049.html
linux curl 命令詳解,以及實例
linux curl是一個利用URL規則在命令行下工作的文件傳輸工具。它支持文件的上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱url為下載工具。
一,curl命令參數,有好多我沒有用過,也不知道翻譯的對不對,如果有誤的地方,還請指正。
- -a/--append 上傳文件時,附加到目標文件
- -A/--user-agent <string> 設置用戶代理發送給服務器
- - anyauth 可以使用“任何”身份驗證方法
- -b/--cookie <name=string/file> cookie字符串或文件讀取位置
- - basic 使用HTTP基本驗證
- -B/--use-ascii 使用ASCII /文本傳輸
- -c/--cookie-jar <file> 操作結束后把cookie寫入到這個文件中
- -C/--continue-at <offset> 斷點續轉
- -d/--data <data> HTTP POST方式傳送數據
- --data-ascii <data> 以ascii的方式post數據
- --data-binary <data> 以二進制的方式post數據
- --negotiate 使用HTTP身份驗證
- --digest 使用數字身份驗證
- --disable-eprt 禁止使用EPRT或LPRT
- --disable-epsv 禁止使用EPSV
- -D/--dump-header <file> 把header信息寫入到該文件中
- --egd-file <file> 為隨機數據(SSL)設置EGD socket路徑
- --tcp-nodelay 使用TCP_NODELAY選項
- -e/--referer 來源網址
- -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
- -f/--fail 連接失敗時不顯示http錯誤
- --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忽略會話Cookie
- - 界面<interface>指定網絡接口/地址使用
- - krb4 <級別>啟用與指定的安全級別krb4
- -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 禁用緩沖輸出
- -o/--output 把輸出寫到該文件中
- -O/--remote-name 把輸出寫到該文件中,保留遠程文件的文件名
- -p/--proxytunnel 使用HTTP代理
- --proxy-anyauth 選擇任一代理身份驗證方法
- --proxy-basic 在代理上使用基本身份驗證
- --proxy-digest 在代理上使用數字身份驗證
- --proxy-ntlm 在代理上使用ntlm身份驗證
- -P/--ftp-port <address> 使用端口地址,而不是使用PASV
- -Q/--quote <cmd>文件傳輸前,發送命令到服務器
- -r/--range <range>檢索來自HTTP/1.1或FTP服務器字節范圍
- --range-file 讀取(SSL)的隨機文件
- -R/--remote-time 在本地生成文件時,保留遠程文件時間
- --retry <num> 傳輸出現問題時,重試的次數
- --retry-delay <seconds> 傳輸出現問題時,設置重試間隔時間
- --retry-max-time <seconds> 傳輸出現問題時,設置最大重試時間
- -s/--silent靜音模式。不輸出任何東西
- -S/--show-error 顯示錯誤
- --socks4 <host[:port]> 用socks4代理給定主機和端口
- --socks5 <host[:port]> 用socks5代理給定主機和端口
- --stderr <file>
- -t/--telnet-option <OPT=val> Telnet選項設置
- --trace <file> 對指定文件進行debug
- --trace-ascii <file> Like --跟蹤但沒有hex輸出
- --trace-time 跟蹤/詳細輸出時,添加時間戳
- -T/--upload-file <file> 上傳文件
- --url <URL> Spet URL to work with
- -u/--user <user[:password]>設置服務器的用戶和密碼
- -U/--proxy-user <user[:password]>設置代理用戶名和密碼
- -v/--verbose
- -V/--version 顯示版本信息
- -w/--write-out [format]什么輸出完成后
- -x/--proxy <host[:port]>在給定的端口上使用HTTP代理
- -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
- -#/--progress-bar 用進度條顯示當前的傳送狀態
二,常用curl實例
1,抓取頁面內容到一個文件中
- [root@krlcgcms01 mytest]# curl -o home.html http://blog.51yip.com
2,用-O(大寫的),后面的url要具體到某個文件,不然抓不下來。我們還可以用正則來抓取東西
- [root@krlcgcms01 mytest]# curl -O http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg
- [root@krlcgcms01 mytest]# curl -O http://blog.51yip.com/wp-content/uploads/2010/[0-9][0-9]/aaaaa.jpg
3,模擬表單信息,模擬登錄,保存cookie信息
- [root@krlcgcms01 mytest]# curl -c ./cookie_c.txt -F log=aaaa -F pwd=****** http://blog.51yip.com/wp-login.php
4,模擬表單信息,模擬登錄,保存頭信息
- [root@krlcgcms01 mytest]# curl -D ./cookie_D.txt -F log=aaaa -F pwd=****** http://blog.51yip.com/wp-login.php
-c(小寫)產生的cookie和-D里面的cookie是不一樣的。
5,使用cookie文件
- [root@krlcgcms01 mytest]# curl -b ./cookie_c.txt http://blog.51yip.com/wp-admin
6,斷點續傳,-C(大寫的)
- [root@krlcgcms01 mytest]# curl -C -O http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg
7,傳送數據,最好用登錄頁面測試,因為你傳值過去后,curl回抓數據,你可以看到你傳值有沒有成功
- [root@krlcgcms01 mytest]# curl -d log=aaaa http://blog.51yip.com/wp-login.php
8,顯示抓取錯誤,下面這個例子,很清楚的表明了。
- [root@krlcgcms01 mytest]# curl -f http://blog.51yip.com/asdf
- curl: (22) The requested URL returned error: 404
- [root@krlcgcms01 mytest]# curl http://blog.51yip.com/asdf
- <HTML><HEAD><TITLE>404,not found</TITLE>
- 。。。。。。。。。。。。
9,偽造來源地址,有的網站會判斷,請求來源地址。
- [root@krlcgcms01 mytest]# curl -e http://localhost http://blog.51yip.com/wp-login.php
10,當我們經常用curl去搞人家東西的時候,人家會把你的IP給屏蔽掉的,這個時候,我們可以用代理
- [root@krlcgcms01 mytest]# curl -x 24.10.28.84:32779 -o home.html http://blog.51yip.com
11,比較大的東西,我們可以分段下載
- [root@krlcgcms01 mytest]# curl -r 0-100 -o img.part1 http://blog.51yip.com/wp-
- content/uploads/2010/09/compare_varnish.jpg
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 101 100 101 0 0 105 0 --:--:-- --:--:-- --:--:-- 0
- [root@krlcgcms01 mytest]# curl -r 100-200 -o img.part2 http://blog.51yip.com/wp-
- content/uploads/2010/09/compare_varnish.jpg
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 101 100 101 0 0 57 0 0:00:01 0:00:01 --:--:-- 0
- [root@krlcgcms01 mytest]# curl -r 200- -o img.part3 http://blog.51yip.com/wp-
- content/uploads/2010/09/compare_varnish.jpg
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 104k 100 104k 0 0 52793 0 0:00:02 0:00:02 --:--:-- 88961
- [root@krlcgcms01 mytest]# ls |grep part | xargs du -sh
- 4.0K one.part1
- 112K three.part3
- 4.0K two.part2
用的時候,把他們cat一下就OK了,cat img.part* >img.jpg
12,不會顯示下載進度信息
- [root@krlcgcms01 mytest]# curl -s -o aaa.jpg http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg
13,顯示下載進度條
- [root@krlcgcms01 mytest]# curl -# -O http://blog.51yip.com/wp-content/uploads/2010/09/compare_varnish.jpg
- ######################################################################## 100.0%
14,通過ftp下載文件
- [zhangy@BlackGhost ~]$ curl -u 用戶名:密碼 -O http://blog.51yip.com/demo/curtain/bbstudy_files/style.css
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 101 1934 101 1934 0 0 3184 0 --:--:-- --:--:-- --:--:-- 7136
- [zhangy@BlackGhost ~]$ curl -O ftp://用戶名:密碼@ip:port/demo/curtain/bbstudy_files/style.css
15,通過ftp上傳
- [zhangy@BlackGhost ~]$ curl -T test.sql ftp://用戶名:密碼@ip:port/demo/curtain/bbstudy_files/
轉載請注明
作者:海底蒼鷹
地址:http://blog.51yip.com/linux/1049.html
######################################################################## 100.0%
wget是一個從網絡上自動下載文件的自由工具。它支持HTTP,HTTPS和FTP協議,可以使用HTTP代理。
所謂的自動下載是指,wget可以在用戶退出系統的之后在后台執行。這意味這你可以登錄系統,啟動一個wget下載任務,然后退出系統,wget將在后台執行直到任務完成,相對於其它大部分瀏覽器在下載大量數據時需要用戶一直的參與,這省去了極大的麻煩。
wget可以跟蹤HTML頁面上的鏈接依次下載來創建遠程服務器的本地版本,完全重建原始站點的目錄結構。這又常被稱作”遞歸下載”。在遞歸下載的時 候,wget 遵循Robot Exclusion標准(/robots.txt). wget可以在下載的同時,將鏈接轉換成指向本地文件,以方便離線瀏覽。
wget 非常穩定,它在帶寬很窄的情況下和不穩定網絡中有很強的適應性.如果是由於網絡的原因下載失敗,wget會不斷的嘗試,直到整個文件下載完畢。如果是服務 器打斷下載過程,它會再次聯到服務器上從停止的地方繼續下載。這對從那些限定了鏈接時間的服務器上下載大文件非常有用。
wget的常見用法:
wget不但功能強大,而且使用起來比較簡單,
基本的語法是:wget [參數列表] “URL” 用”"引起來可以避免因URL中有特殊字符造成的下載出錯。
下面就結合具體的例子來說明一下wget的用法。
1、下載整個http或者ftp站點。
wget http://place.your.url/here
這個命令可以將http://place.your.url/here 首頁下載下來。使用-x會強制建立服務器上一模一樣的目錄,如果使用-nd參數,那么服務器上下載的所有內容都會加到本地當前目錄。
wget -r http://place.your.url/here
這個命令會按照遞歸的方法,下載服務器上所有的目錄和文件,實質就是下載整個網站。這個命令一定要小心使用,因為在下載的時候,被下載網站指向的所有地址 同樣會被下載,因此,如果這個網站引用了其他網站,那么被引用的網站也會被下載下來!基於這個原因,這個參數不常用。可以用-l number參數來指定下載的層次。例如只下載兩層,那么使用-l 2。
要是您想制作鏡像站點,那么可以使用-m參數,例如:
wget -m http://place.your.url/here
這時wget會自動判斷合適的參數來制作鏡像站點。此時,wget會登錄到服務器上,讀入robots.txt並按robots.txt的規定來執行。
2、斷點續傳。
當文件特別大或者網絡特別慢的時候,往往一個文件還沒有下載完,連接就已經被切斷,此時就需要斷點續傳。wget的斷點續傳是自動的,只需要使用-c參數,例如:
wget -c http://the.url.of/incomplete/file
使用斷點續傳要求服務器支持斷點續傳。-t參數表示重試次數,例如需要重試100次,那么就寫-t 100,如果設成-t 0,那么表示無窮次重試,直到連接成功。-T參數表示超時等待時間,例如-T 120,表示等待120秒連接不上就算超時。
3、批量下載。
如果有多個文件需要下載,那么可以生成一個文件,把每個文件的URL寫一行,例如生成文件download.txt,然后用命令:wget -i download.txt
這樣就會把download.txt里面列出的每個URL都下載下來。(如果列的是文件就下載文件,如果列的是網站,那么下載首頁)
4、選擇性的下載。
可以指定讓wget只下載一類文件,或者不下載什么文件。例如:
wget -m –reject=gif http://target.web.site/subdirectory
表示下載http://target.web.site/subdirectory,但是忽略gif文件。–accept=LIST 可以接受的文件類型,–reject=LIST拒絕接受的文件類型。
5、密碼和認證。
wget只能處理利用用戶名/密碼方式限制訪問的網站,可以利用兩個參數:
–http-user=USER設置HTTP用戶
–http-passwd=PASS設置HTTP密碼
對於需要證書做認證的網站,就只能利用其他下載工具了,例如curl。
6、利用代理服務器進行下載。
如果用戶的網絡需要經過代理服務器,那么可以讓wget通過代理服務器進行文件的下載。此時需要在當前用戶的目錄下創建一個.wgetrc文件。文件中可以設置代理服務器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分別表示http的代理服務器和ftp的代理服務器。如果代理服務器需要密碼則使用:
–proxy-user=USER設置代理用戶
–proxy-passwd=PASS設置代理密碼
這兩個參數。
使用參數–proxy=on/off 使用或者關閉代理。
wget還有很多有用的功能,需要用戶去挖掘。
wget的使用格式
Usage: wget [OPTION]… [URL]…
* 用wget做站點鏡像:
wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
# 或者wget -m http://dsec.pku.edu.cn/~usr_name/
* 在不穩定的網絡上下載一個部分下載的文件,以及在空閑時段下載
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
# 或者從filelist讀入要下載的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &
上面的代碼還可以用來在網絡比較空閑的時段進行下載。我的用法是:在mozilla中將不方便當時下載的URL鏈接拷貝到內存中然后粘貼到文件 filelist.txt中,在晚上要出去系統前執行上面代碼的第二條。
* 使用代理下載
wget -Y on -p -k https://sourceforge.net/projects/wvware/
代理可以在環境變量或wgetrc文件中設定
# 在環境變量中設定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中設定代理
http_proxy = http://proxy.yoyodyne.com:18023/
ftp_proxy = http://proxy.yoyodyne.com:18023/
wget各種選項分類列表
* 啟動
-V, –version 顯示wget的版本后退出
-h, –help 打印語法幫助
-b, –background 啟動后轉入后台執行
-e, –execute=COMMAND 執行`.wgetrc’格式的命令,wgetrc格式參見/etc/wgetrc或~/.wgetrc
* 記錄和輸入文件
-o, –output-file=FILE 把記錄寫到FILE文件中
-a, –append-output=FILE 把記錄追加到FILE文件中
-d, –debug 打印調試輸出
-q, –quiet 安靜模式(沒有輸出)
-v, –verbose 冗長模式(這是缺省設置)
-nv, –non-verbose 關掉冗長模式,但不是安靜模式
-i, –input-file=FILE 下載在FILE文件中出現的URLs
-F, –force-html 把輸入文件當作HTML格式文件對待
-B, –base=URL 將URL作為在-F -i參數指定的文件中出現的相對鏈接的前綴
–sslcertfile=FILE 可選客戶端證書
–sslcertkey=KEYFILE 可選客戶端證書的KEYFILE
–egd-file=FILE 指定EGD socket的文件名
* 下載
–bind-address=ADDRESS 指定本地使用地址(主機名或IP,當本地有多個IP或名字時使用)
-t, –tries=NUMBER 設定最大嘗試鏈接次數(0 表示無限制).
-O –output-document=FILE 把文檔寫到FILE文件中
-nc, –no-clobber 不要覆蓋存在的文件或使用.#前綴
-c, –continue 接着下載沒下載完的文件
–progress=TYPE 設定進程條標記
-N, –timestamping 不要重新下載文件除非比本地文件新
-S, –server-response 打印服務器的回應
–spider 不下載任何東西
-T, –timeout=SECONDS 設定響應超時的秒數
-w, –wait=SECONDS 兩次嘗試之間間隔SECONDS秒
–waitretry=SECONDS 在重新鏈接之間等待1…SECONDS秒
–random-wait 在下載之間等待0…2*WAIT秒
-Y, –proxy=on/off 打開或關閉代理
-Q, –quota=NUMBER 設置下載的容量限制
–limit-rate=RATE 限定下載輸率
* 目錄
-nd –no-directories 不創建目錄
-x, –force-directories 強制創建目錄
-nH, –no-host-directories 不創建主機目錄
-P, –directory-prefix=PREFIX 將文件保存到目錄 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER層遠程目錄
* HTTP 選項
–http-user=USER 設定HTTP用戶名為 USER.
–http-passwd=PASS 設定http密碼為 PASS.
-C, –cache=on/off 允許/不允許服務器端的數據緩存 (一般情況下允許).
-E, –html-extension 將所有text/html文檔以.html擴展名保存
–ignore-length 忽略 `Content-Length’頭域
–header=STRING 在headers中插入字符串 STRING
–proxy-user=USER 設定代理的用戶名為 USER
–proxy-passwd=PASS 設定代理的密碼為 PASS
–referer=URL 在HTTP請求中包含 `Referer: URL’頭
-s, –save-headers 保存HTTP頭到文件
-U, –user-agent=AGENT 設定代理的名稱為 AGENT而不是 Wget/VERSION.
–no-http-keep-alive 關閉 HTTP活動鏈接 (永遠鏈接).
–cookies=off 不使用 cookies.
–load-cookies=FILE 在開始會話前從文件 FILE中加載cookie
–save-cookies=FILE 在會話結束后將 cookies保存到 FILE文件中
* FTP 選項
-nr, –dont-remove-listing 不移走 `.listing’文件
-g, –glob=on/off 打開或關閉文件名的 globbing機制
–passive-ftp 使用被動傳輸模式 (缺省值).
–active-ftp 使用主動傳輸模式
–retr-symlinks 在遞歸的時候,將鏈接指向文件(而不是目錄)
* 遞歸下載
-r, –recursive 遞歸下載--慎用!
-l, –level=NUMBER 最大遞歸深度 (inf 或 0 代表無窮).
–delete-after 在現在完畢后局部刪除文件
-k, –convert-links 轉換非相對鏈接為相對鏈接
-K, –backup-converted 在轉換文件X之前,將之備份為 X.orig
-m, –mirror 等價於 -r -N -l inf -nr.
-p, –page-requisites 下載顯示HTML文件的所有圖片
* 遞歸下載中的包含和不包含(accept/reject)
-A, –accept=LIST 分號分隔的被接受擴展名的列表
-R, –reject=LIST 分號分隔的不被接受的擴展名的列表
-D, –domains=LIST 分號分隔的被接受域的列表
–exclude-domains=LIST 分號分隔的不被接受的域的列表
–follow-ftp 跟蹤HTML文檔中的FTP鏈接
–follow-tags=LIST 分號分隔的被跟蹤的HTML標簽的列表
-G, –ignore-tags=LIST 分號分隔的被忽略的HTML標簽的列表
-H, –span-hosts 當遞歸時轉到外部主機
-L, –relative 僅僅跟蹤相對鏈接
-I, –include-directories=LIST 允許目錄的列表
-X, –exclude-directories=LIST 不被包含目錄的列表
-np, –no-parent 不要追溯到父目錄
wget -S –spider url 不下載只顯示過程
###########################################################################
wget命令
Linux下載工具Wget常用參數
-b:后台下載,Wget默認的是把文件下載到當前目錄並生成wget-log文件
-O:將文件下載到指定的目錄中。
-P:保存文件之前先創建指定名稱的目錄。
-t:嘗試連接次數,當Wget無法與服務器建立連接時,嘗試連接多少次。
-c:斷點續傳,如果下載中斷,那么連接恢復時會從上次斷點開始下載
(1) 下載速度測試 wget -S http://www.baidu.com
(2) 下載a.txt中所包含的鏈接的所有文件 wget -i a.txt
(3) 強制建立目錄 wget -x http://http://baike.baidu.com/wenhua/ (說明:強制在當前目錄中創建了baike.baidu.com與wenhua兩個目錄,並且是上下層關系)
(4) wget -r www.baidu.com 下載整個網站到當前目錄 -r參數為遞歸下載
(5) wget -c http://www.baidu.com 這個-c參數可以斷點續傳,如果不小心終止了,可以繼續使用命令接着下載。
(6) wget -O /dev/null http://www.baidu.com 下載速度測試。-O參數指定下載到/dev/null文件目錄中
(7) wget -S --spider http://www.baidu.com 不下載只顯示過程
(8) wget -P /home http://www.baidu.com 指定下載 到/home目錄下 -P, --directory-prefix=名稱 保存文件前先創建指定名稱的目錄
(9) wget -S -O /dev/null -e http_proxy=127.0.0.1 http://www.baidu.com 指定本地下載目錄/de/null -e http_proxy=127.0.0.1 指定從本地下載www.baidu.com
(10) wget -i filename.txt 將要下載的地址寫在filename.txt文件中,然后執行這條命令后就會按照文件中列出的地址都下載下來。
(11) wget -S --spider http://202.91.249.242/do_not_delete/noc.gif --header="Host:www.cp2y.com" 指定IP:202.91.249.242 去鏈接下載此條URL
(12)while sleep 0.1;do wget -SO /dev/null --header host:cdntest.zhongsou.com 113.57.252.233/imgs/green1.gif;done 循環下載每次間隔0.1s
內容實在太多,記錄下URL先,有空時再慢慢研究:
wget:
中文詳細說明(參數什么的很多很全):http://forum.ubuntu.org.cn/viewtopic.php?f=73&t=213029
這個也不錯: http://os.51cto.com/art/201002/183100.htm
比如,下載整個網站以便底線閱讀:http://forum.ubuntu.org.cn/viewtopic.php?f=73&t=150608&start=0
使用wget為Ubuntu更新加速:
http://forum.ubuntu.org.cn/viewtopic.php?f=113&t=226617&start=0&sid=ac531d90b008535e867c1e8355e5cf01
curl:
這個貌似沒有wget應用那么廣,不過有集合或序列時還是蠻高效的:http://curl.haxx.se/docs/manpage.html
axel,aria2:
雖然有了前面這兩個功能強大的工具,但它們都不能多線程並發下載資源,在下載大型文件時,我們更多時候會選擇axel或aria2:
http://aria2.sourceforge.net/manual/en/html/aria2c.html#options
關於單線程和多線程的速度比拼問題,也就是大家經常討論的wget 和 axel 的下載速度比較;在網上偶然間看到如下解釋,覺得有道理,
就粘貼上來了:
首先,為什么單線程會比多線程慢?
下載時候,速度受兩方面限制,你的下行帶寬和服務器的上行帶寬(說白了就是你的下載速度和服務器的上傳速度)
分情況來看
情況a.下載速度>服務器帶寬
比如你的下載速度是100k,服務器則只能提供20k的帶寬。於是你用單線程下載,就只有20k的速度
但問題是,一般來說,服務器的最大帶寬肯定不止20k,只是服務器端會限制單個訪問的帶寬(帶寬都給一個訪問者用了,別人用什么去)。這時多線程下載就可以同時n次訪問服務器,獲得20k*n的速度,當然,不會大於100k。
情況b.下載速度<=服務器帶寬
你的下載速度是100k,而服務器則能提供>100k的帶寬,這個時候,你用單線程就能達到100k的極限速度,而多線程同時維護多個訪問連接,會把你100k的下載帶寬花費在一些沒用的地方,反而會比單線程慢。
前幾年,情況a比較多見,所以多線程比較牛x,這幾年,隨着硬件成本降低,國內網絡基礎設施建設發展,還有p2p的分流,情況b就多了起來,像我是512k的adsl,只有50k的下行帶寬,基本上都是情況b
這樣就可以理解,為什么wget經常不比多線程慢的原因了
另外還有一個問題,就是服務器比較遠的情況,比如國外的服務器,由於包傳送中的延遲與丟失,服務器可能提供了很大的帶寬,但是到了下載端,就要縮水不少,這時就等於情況a了。不過另一方面,發達國家服務器帶寬通常比較大(人家有錢$_$),這方面會有所彌補,比如我在ubuntu.com下iso,用wget就能達到下載速度的極限。
所以現在開太多的線程下載,不僅浪費你的下載帶寬,也增加了你的機器和服務器的負荷,完全沒有必要。
推薦先用wget下下看,如果能到極限就直接下,不能到極限的話,就做個除法,計算下開幾個線程合適再下。
http://my.oschina.net/tongzhe/blog/213579
1 wget
wget是linux最常用的下載命令, 一般的使用方法是: wget + 空格 + 要下載文件的url路徑
例如: # wget http://www.linuxsense.org/xxxx/xxx.tar.gz
簡單說一下-c參數, 這個也非常常見, 可以斷點續傳, 如果不小心終止了, 可以繼續使用命令接着下載
例如: # wget -c http://www.linuxsense.org/xxxx/xxx.tar.gz
下面詳細闡述wget的用法:
wget是一個從網絡上自動下載文件的自由工具。它支持HTTP,HTTPS和FTP協議,可以使用HTTP代理.
所謂的自動下載是指,wget可以在用戶退出系統的之后在后台執行。這意味這你可以登錄系統,啟動一個wget下載任務,然后退出系統,wget將在后台執行直到任務完成,相對於其它大部分瀏覽器在下載大量數據時需要用戶一直的參與,這省去了極大的麻煩。
wget可以跟蹤HTML頁面上的鏈接依次下載來創建遠程服務器的本地版本,完全重建原始站點的目錄結構。這又常被稱作”遞歸下載”。在遞歸下載的 時候,wget遵循Robot Exclusion標准(/robots.txt). wget可以在下載的同時,將鏈接轉換成指向本地文件,以方便離線瀏覽。
wget非常穩定,它在帶寬很窄的情況下和不穩定網絡中有很強的適應性.如果是由於網絡的原因下載失敗,wget會不斷的嘗試,直到整個文件下載完 畢。如果是服務器打斷下載過程,它會再次聯到服務器上從停止的地方繼續下載。這對從那些限定了鏈接時間的服務器上下載大文件非常有用。
wget的常見用法
wget的使用格式
Usage: wget [OPTION]… [URL]…
* 用wget做站點鏡像:
wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
# 或者
wget -m http://www.tldp.org/LDP/abs/html/
* 在不穩定的網絡上下載一個部分下載的文件,以及在空閑時段下載
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
# 或者從filelist讀入要下載的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &
上面的代碼還可以用來在網絡比較空閑的時段進行下載。我的用法是:在mozilla中將不方便當時下載的URL鏈接拷貝到內存中然后粘貼到文件filelist.txt中,在晚上要出去系統前執行上面代碼的第二條。
* 使用代理下載
wget -Y on -p -k https://sourceforge.net/projects/wvware/
代理可以在環境變量或wgetrc文件中設定
# 在環境變量中設定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中設定代理
http_proxy = http://proxy.yoyodyne.com:18023/
ftp_proxy = http://proxy.yoyodyne.com:18023/
wget各種選項分類列表
* 啟動
-V, –version 顯示wget的版本后退出
-h, –help 打印語法幫助
-b, –background 啟動后轉入后台執行
-e, –execute=COMMAND 執行`.wgetrc’格式的命令,wgetrc格式參見/etc/wgetrc或~/.wgetrc
* 記錄和輸入文件
-o, –output-file=FILE 把記錄寫到FILE文件中
-a, –append-output=FILE 把記錄追加到FILE文件中
-d, –debug 打印調試輸出
-q, –quiet 安靜模式(沒有輸出)
http://www.itqun.net/content-detail/511328.html
http://www.guanwei.org/post/LINUXnotes/05/Linux-Wget-download-method.html
LINUX命令行下以HTTP方式下載文件的方法
Post by mrchen, 2010-5-23, Views:101
原創文章如轉載,請注明:轉載自冠威博客 [ http://www.guanwei.org/ ]
本文鏈接地址:http://www.guanwei.org/post/LINUXnotes/05/Linux-Wget-download-method.html
順便提一下。如果下載ftp服務器上的文件,可以用ftp命令。然后用get命令下載文件
對於喜歡命令行操作及追求高效率、高速度下載的朋友,推薦使用命令行下載工具。命令行工具不但使用方便,而且大多具有很高的下載速度及下載效率,尤其適合於大批量下載文件。下面就為大家詳細介紹一下這些工具。
Wget
Wget是一個十分常用命令行下載工具,多數Linux發行版本都默認包含這個工具。如果沒有安裝可在http://www.gnu.org/software/wget/wget.html下載最新版本,並使用如下命令編譯安裝:
#tar zxvf wget-1.9.1.tar.gz
#cd wget-1.9.1 #./configure
#make #make install
它的用法很簡單,Wget使用格式如下: #wget [選項] [下載地址]
1.Wget常用參數
◆-b:后台下載,Wget默認的是把文件下載到當前目錄。
◆-O:將文件下載到指定的目錄中。
◆-P:保存文件之前先創建指定名稱的目錄。
◆-t:嘗試連接次數,當Wget無法與服務器建立連接時,嘗試連接多少次。
◆-c:斷點續傳,如果下載中斷,那么連接恢復時會從上次斷點開始下載。
◆-r:使用遞歸下載
除了上述常用功能,Wget還支持HTTP和FTP代理功能,編輯其配置文件“/etc/wgetrc”即可。具體方法是使用VI編輯器打開上述文 件,將 “http_proxy”和“ftp_proxoy”前的#去掉,然后在這兩項后輸入相應的代理服務器的地址,保存退出即可。此外,Wget還可下載整個 網站,如下載整個Man手冊中心。只需輸入如下命令即可: #wget -r -p -np -k http://man.chinaunix.net
其中-r參數是指使用遞歸下載,-p是指下載所有顯示完整網頁所以需要的文件,如圖片等,-np是指不搜索上層目錄,-k則是指將絕對鏈接轉換為相對鏈接。
2 Prozilla
Prozilla也是一個十分流行的命令行下載工具,支持多線程下載和斷點續傳功能。可到http://prozilla.genesys.ro/下載最新的1.3.7.4安裝包,下載安裝包后使用如下命令進行安裝:
#tar zxvf prozilla-1.3.7.4.tar.gz
#cd prozilla-1.3.7.4
#./configure #make
#make install
Prozilla命令格式如下: #proz [參數] [下載地址] 常用的選項有:
◆-k=n :設置n個線程下載。不加此參數指定線程數,Prozilla默認為4線程下載。
◆-P, --directory-prefix=DIR:指定將下載的文件保存在DIR/目錄。
◆-r, --resume:繼續下載未完成的文件。如果要指定線程數下載可用如下命令: #proz -k=5 http://64.12.204.21/pub/mozilla.org/firefox/releases/1.0/linux-i686/zh-CN/firefox-1.0.installer.tar.gz 這樣便以5線程進行文件的下載,並將文件保存到當前目錄。和Wget一樣,Prozilla也提供了續傳功能,下載中斷后,重新輸入上述命令,就會出現提 示續傳,按R鍵就可繼續下載了。
3 Myget
MyGet目標設計成一個可擴展的,擁有豐富界面的多線程下載工具,它支持HTTP、FTP、HTTPS、MMS、RTSP等協議。在 http://myget.sourceforge.net/release/myget-0.1.0.tar.bz2下載其最新版本0.1.0,下載后 使用如下命令安裝:
#tar jxvf myget-0.1.0.tar.bz2
#cd myget-0.1.0 #./configure
#make
#make install
MyGet命令格式如下: #mytget [選項] [下載地址] 常用的選項:
◆-d [目錄]:指定下載到的文件在本地存放的位置,默認當前目錄。
◆-f [文件]:指定下載文件名稱。
◆-h:幫助選項。
◆-n [線程數]:下載線程數量,默認為4個。
◆-x [代理服務器地址]:設置代理服務器地址,如“-x http://user:password@host :port”。 MyGet常用的形式如下: #mytget -d /root/ -n 10 http://lumaqq.linuxsir.org/download/patch/lumaqq_2004t_patch_2005.07.21.00.00.zip
4 Linuxdown
Linuxdown是一個命令行多線程下載工具,最多可支持30線程的下載。在https://gro.clinux.org/frs /download.php/1015/linuxdown-1.0.0.tar.gz下載最新的1.1.0版本。然后使用如下命令進行編譯安裝:
#tar zxvf linuxdown-1.1.0.tar.gz
#cd dandelion/
#make
#make install
Linuxdown格式為: #linuxdown [下載地址] [選項] [線程數] 需要注意的是下載地址和選項都需要西文引號括起來,線程數不可超過30個。一個典型的下載如下: #linuxdown "http://lumaqq.linuxsir.org/download/patch/lumaqq_2004t_patch_2005.07.21.00.
5 Curl
Curl也是Linux下不錯的命令行下載工具,小巧、高速,唯一的缺點是不支持多線程下載。在http://curl.haxx.se/download/curl-7.14.0.tar.gz下載最新版本。下載后便可使用如下命令編譯安裝:
#tar zxvf curl-7.14.0.tar.gz
#cd curl-7.14.0/
#./configure
#make
#make test
#make install
Curl使用格式如下: #curl [選項][下載地址] Curl典型下載如下: #curl -O http://10.1.27.10/~kennycx/tools/lumaqq_2004-linux_gtk2_x86_with_jre.tar.gz 使用Curl下載一個文件並保存到當前目錄。此外,Curl雖然不支持多線程下載,但它可同時下載多個文件或下載文件的某一部分,可使用如下命令實現: #curl -r 0-199 http://www.netscape.com/ 獲得文件的前200 bytes。對於常用的代理下載Curl也可輕松實現,具體操作如下: #curl -x 10.1.27.10:1022 ftp://ftp.funet.fi/README 使用代理地址為10.1.27.10端口為1022的代理服務器下載一個文件。 #curl -U user:passwd -x 10.1.27.10:1022 ftp://ftp.funet.fi/README 如果代理服務器需要特別的驗證,則需要在user:passwd處輸入合法的帳
6 Axel
Axel是命令行下的多線程下載工具,支持斷點續傳,速度通常情況下是Wget的幾倍。可在http://www.linuxfans.org /nuke/modules.php?name=Site_Downloads&op=mydown&did=1697下載。下載后使用 如下命令編譯安裝:
#tar zxvf axel-1.0a.tar.gz
#cd axel-1.0a/
#./configure
#make
#make install
基本的用法如下: #axel [選項] [下載目錄] [下載地址] 一個典型下載如下: #alex -n 10 -o /home/kennycx/ http://10.1.27.10/~kennycx/tools/lumaqq_2004-linux_gtk2_x86_with_jre.tar.gz 用10線程將指定路徑的文件下載到/home/kennycx/這個目錄下。
本文詳細介紹了Linux中常用的下載工具,這些下載工具功能上各有千秋,使用上都比較簡單,所以無論是初學者還是Linux高手總有一款適合你。
Linux下用命令行也可以下載HTTP網站的文件。順便提一下,如果是ftp網站可以用ftp命令然后get XXX。