Linux中curl命令和wget命令的使用介紹與比較

原文鏈接:

1、http://www.cnblogs.com/duhuo/p/5695256.html

2、http://www.jb51.net/article/112345.htm



這篇文章主要給大家介紹了Linux中curl命令和wget命令使用以及這兩者之間的區別比較,curl和wget命令都是Linux下的工具,可以用來下載文件。文中介紹的非常詳細,相信對大傢俱有一定的參考價值,需要的朋友們下面來一起看看吧

本文介紹的是Linux中curl命令和wget命令,這兩者都是用來下載文件的工具,下面來看看詳細的介紹:

一、wget

wget是linux最常用的下載命令, 一般的使用方法是: wget + 空格 + 要下載文件的url路徑

例1:

# wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip

下載文件保存到當前目錄,文件名默認是url最後一個/後面的內容,這裏就是 wordpress-3.1-zh_CN.zip


例2:

# wget -O myfile http://www.minjieren.com/wordpress-3.1-zh_CN.zip

通過-O參數,可以指定文件名,這裏指定的是myfile


例3:

wget www.baidu.com

會在當前目錄生成一個index.html文件


二、curl

在Linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持文件的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url爲下載工具。

語法:# curl [option] [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 -O http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-i586.tar.gz

下載文件保存到當前目錄,文件名默認是url最後一個/後面的內容,這裏就是 jdk-8u91-linux-i586.tar.gz。

注意:必須要加-O參數,否則是直接在控制檯上顯示文件內容了.

說明:這兩個命令工具,linux系統中缺省不一定有的,如果沒有,需要自己安裝。如果是在ubuntu下。

可以執行如下命令進行安裝

?

1
sudo apt-get install curl

它們的區別有如下幾點:

      1.curl是libcurl這個庫支持的,wget是一個純粹的命令行命令。

      2.curl支持更多的協議。curl supports FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP and RTSP at the time of this writing. Wget supports HTTP, HTTPS and FTP.

      3.curl 默認支持HTTP1.1(也支持1.0),而wget僅僅支持HTTP1.0規範。引用wget的man page中的一段話吧,

?

1
Please be aware that Wget needs to know the size of the POST data in advance. It's not quite clear how to work around this limitation inherent in HTTP/1.0. Although HTTP/1.1 introduces chunked transfer that doesn't require knowing the request length in advance, a client can't use chunked unless it knows it's talking to an HTTP/1.1 server. And it can't know that until it receives a response, which in turn requires the request to have been completed -- a chicken-and-egg problem.

      4.curl在指定要下載的鏈接時能夠支持URL的序列或集合,而wget則不能這樣;

      5.wget支持遞歸下載,而curl則沒有這個功能。(這是wget的一個主要好處,wget也是有優勢的,呵呵)



以下爲單獨的curl部分



在Linux中curl是一個利用URL規則在命令行下工作的文件傳輸工具,可以說是一款很強大的http命令行工具。它支持文件的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url爲下載工具。

語法:# curl [option] [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  Speed100 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 
# curl -r 100-200 -o dodo1_part2.JPG 
# curl -r 200- -o dodo1_part3.JPG 
# cat dodo1_part* > dodo1.JPG

這樣就可以查看dodo1.JPG的內容了

8.5:通過ftp下載文件
curl可以通過ftp下載文件,curl提供兩種從ftp中下載的語法

# curl -O -u 用戶名:密碼 
# 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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章