介紹
cURL是一個(gè)利用URL語法的文件傳輸工具,是基于libcurl的前端命令行工具。它支持很多協(xié)議:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 它同樣支持HTTPS認(rèn)證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認(rèn)證, HTTP上傳, 代理服務(wù)器, cookies, 用戶名/密碼認(rèn)證, 下載文件斷點(diǎn)續(xù)傳, 上載文件斷點(diǎn)續(xù)傳, http代理服務(wù)器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理服務(wù)器,通過http代理服務(wù)器上傳文件到FTP服務(wù)器等等,功能十分強(qiáng)大。
除了使用curl命令行直接進(jìn)行相關(guān)的網(wǎng)絡(luò)操作,你也可以自由地使用libcurl,它是用C語言編寫的,可以綁定到眾多的編程語言中,如C,C++,PHP,Python,Perl,Java等等。你可以很方便地利用libcurl,在程序中進(jìn)行一些網(wǎng)絡(luò)傳輸工作,來代替一些語言的內(nèi)置,使你的知識(shí)可重用。在Unix工作環(huán)境下,你可以用curl代替wget和ftp等工具,并能將這種學(xué)習(xí)經(jīng)驗(yàn)遷移到將來使用libcurl來完成一些自動(dòng)化任務(wù)。
curl是瑞典curl組織開發(fā)的,可以通過http://curl.haxx.se/來獲取更詳細(xì)的信息和下載文件。
curl命令行工具使用
curl太強(qiáng)大了,只能對(duì)其HTTP的部分作一簡(jiǎn)單的介紹,其他選項(xiàng)可以參見其附帶的手冊(cè)。它的后端庫的使用也非常方便,主要也是在選項(xiàng)設(shè)置上,跟命令行基本無異。
用法
curl [選項(xiàng)] [URL...]
URL 語法
URL語法是跟協(xié)議相關(guān)的,具體細(xì)節(jié)可參見RFC 3986
可以指定多個(gè)URLs或者部分URL地址,通過花括號(hào){}進(jìn)行分割:
http://site.{one,two,three}.com
或者用[]使用字母序:
ftp://ftp.numericals.com/file[1-100].txt
ftp://ftp.numericals.com/file[001-100].txt (有前導(dǎo)零)
ftp://ftp.letters.com/file[a-z]].txt
當(dāng)前序列嵌套不被支持,但是還是可以使用下列的樣式:
http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
可以在命令行指定任意數(shù)量的URLs,它們將以指定的順序被取回。
從curl7.15.1開始指定可以范圍步長,所以可以得到第n個(gè)數(shù)或字母:
http://www.numericals.com/file[1-100:10].txt
http://www.letters.com/file[a-z:2].txt
如果使用了protocal://前綴,curl會(huì)將嘗試你想使用的協(xié)議。它默認(rèn)使用HTTP,但是其他一些協(xié)議也常被用作主機(jī)名。比如說,以"ftp"打頭的主機(jī)名,curl會(huì)假定你想使用ftp協(xié)議。
Curl會(huì)嘗試對(duì)多文件傳輸使用重連接,可以使從同一服務(wù)器獲取很多文件時(shí),不會(huì)進(jìn)行多次的連接。這種做法改進(jìn)了速度,當(dāng)然這只會(huì)在同一命令行中指定的文件啟用,而不會(huì)在獨(dú)立的Curl調(diào)用時(shí)使用。
進(jìn)度指示器
curl通常在操作時(shí)會(huì)顯示一個(gè)進(jìn)度指示器,來指明當(dāng)前的傳輸量,傳輸速度和預(yù)計(jì)的剩余時(shí)間等等。
但是,即然curl默認(rèn)將數(shù)據(jù)顯示在終端,如果你調(diào)用curl進(jìn)行操作,它會(huì)將數(shù)據(jù)打印到終端上,這時(shí)它會(huì)禁用掉進(jìn)度指示器,否則這些會(huì)將輸出信息搞亂掉。
如果在進(jìn)行HTTP的POST或PUT請(qǐng)求時(shí),你想將輸出重定向到文件中,可以使用shell的重定向符(>),或者類似的-o[file]選項(xiàng)。
但是在FTP上傳并不會(huì)這樣,這些操作不會(huì)將數(shù)據(jù)插入到終端中。
如果想使用進(jìn)度欄,而不是常規(guī)的指示器,那么-#會(huì)非常有幫助。
常用的HTTP選項(xiàng)
-A/--user-agent<agent string>
(HTTP)指定用戶代理字符串發(fā)送給HTTP服務(wù)器。如果這個(gè)字段沒有被設(shè)為"Mozilla/4.0",某些CGIs將不會(huì)正常工作。如果在字符串中存在空白字符,需要用單引號(hào)標(biāo)識(shí)。這個(gè)字段值也可用-H/--header選項(xiàng)進(jìn)行設(shè)置。
如果這選項(xiàng)被多次設(shè)置,最后的設(shè)置將起作用。
-b/--cookie<name=data>
(HTTP)將data作為cookie傳給HTTP服務(wù)器,這數(shù)據(jù)當(dāng)然是在使用了"Set-Cookie:"后,先前從服務(wù)端接收到的。這數(shù)據(jù)應(yīng)是"NAME1=VALUE1;NAME2=VALUE2"的格式。
如果沒有"="字符,它將會(huì)當(dāng)作先前存儲(chǔ)cookie行的文件名,如果它能被匹配的話。使用這選項(xiàng),也能激活"cookie parser",它使curl記錄傳入的cookies數(shù)據(jù)。將它與-L/--locaion選項(xiàng)組合將會(huì)更加便利。被讀取cookie的文件格式應(yīng)當(dāng)是文本HTTP頭或者Netscape/Mozilla cookie文件格式。
注意:被-b/--cookie指定的文件只能作為輸入使用。沒有cookie會(huì)存儲(chǔ)在這文件中。為了存儲(chǔ)cookie,應(yīng)使用-c/--cookie-jar選項(xiàng)或者直接將HTTP頭輸出到文件中,用-D/--dump-header選項(xiàng)。這選項(xiàng)可以設(shè)置多次,但是只有最后一個(gè)起作用。
-connect-timeout<seconds>
以秒計(jì)的最大超時(shí),用于進(jìn)行服務(wù)器連接時(shí)。這只在連接階段起作用,一旦curl連接建立,這選項(xiàng)將不再起作用。
-c/--cookie-jar<file name>
指定在完成一系列操作后,需要將全部的cookie信息保存到哪個(gè)文件中。Curl會(huì)將先前讀取的cookie的信息和從服務(wù)器返回的信息一起保存。如果沒有cookie信息,則不會(huì)進(jìn)行寫文件。cookie信息的文件將與Netscape cookie文件格式保存。如果文件名被設(shè)置為'-',則將cookie打印至終端。
注意:如果cookie-jar不能被創(chuàng)建寫入,整個(gè)curl操作也不會(huì)失改,甚至不會(huì)向你報(bào)告錯(cuò)誤.使用-v將會(huì)得到警告顯示,但也只能在可能導(dǎo)致發(fā)生致命錯(cuò)誤的情況才會(huì)顯示。
--create-dirs
這與-o選項(xiàng)配合使用,curl會(huì)在需要時(shí)建立本地文件夾結(jié)構(gòu)。這選項(xiàng)會(huì)創(chuàng)建在-o選項(xiàng)中涉及到的文件夾。如果-o選項(xiàng)中的文件名沒有使用到文件夾,或者所需的文件夾已經(jīng)存在,則不會(huì)有文件夾創(chuàng)建。
-D/--dump-header<file>
將協(xié)議頭寫到指定的文件中。當(dāng)你想存儲(chǔ)HTTP站點(diǎn)發(fā)給你的數(shù)據(jù)時(shí),這選項(xiàng)非常有用。在協(xié)議頭中的cookie將來可以用curl的另外調(diào)用來進(jìn)行讀取,那就是-b/--cookie選項(xiàng)。但是-c/--cookie-jar選項(xiàng)將會(huì)是更好的存儲(chǔ)cookie信息的方法。
當(dāng)使用FTP協(xié)議時(shí),ftp服務(wù)器的應(yīng)答信息將相應(yīng)地當(dāng)作成協(xié)議頭,然后被存儲(chǔ)。
-p/-proxytunnel
當(dāng)HTTP代理被設(shè)置后(-x/--proxy),選項(xiàng)會(huì)使不是HTTP協(xié)議的傳輸試圖通過代理隧道,而不是表現(xiàn)得HTTP類似的操作形為。代理隧道的方法是通過HTTP服務(wù)器直接使用CONNECT請(qǐng)求,讓代理直接連接到curl隧道所請(qǐng)求的遠(yuǎn)程端口號(hào)的方式來實(shí)現(xiàn)的。
-o/--output<file>
將輸出信息打印到文件中,而不是終端。可使用{}或者[]取回多個(gè)文檔,可在file指定格式中的'#'跟一數(shù)字,這樣這變量將會(huì)由取回的URL字符串所取代。如下:
curl http://{one,two}.site.com -o "file_#1.txt"
如果有多個(gè)變量,可以寫成下面的樣子:
curl http://{site.host}.host[1-5].com -o "#1_#2"
你可對(duì)任意數(shù)量的URL使用同樣多的這個(gè)選項(xiàng)
-x/--proxy<proxyhost[:port]>
使用指定的HTTP代理,如果端口號(hào)沒有被指定,默認(rèn)為1080.
這選項(xiàng)會(huì)覆蓋環(huán)境變量中代理服務(wù)器的設(shè)置。如果環(huán)境變量中設(shè)置了代理,可將proxy設(shè)置為空字符串,來覆蓋環(huán)境變量中的設(shè)置。
注意:所有通過HTTP代理的操作都會(huì)自動(dòng)轉(zhuǎn)化為HTTP協(xié)議。這意味著一些特定協(xié)議的操作將會(huì)變得無效。這不會(huì)有問題,如果在設(shè)置了-p/--proxytunnel選項(xiàng)來通過代理隧道進(jìn)行操作。
簡(jiǎn)單示例
獲取cppblog首頁,打印至終端
>curl http://m.shnenglu.com
重定向,保存到文件cppblog.html
>curl http://m.shnenglu.com
作用同上,使用選項(xiàng)
>curl -o baidu.html http://www.baidu.com
使用http代理,可指定IP和端口
>curl -x 202.127.98.43:80 -o baidu.html http:www.baidu.com
在訪問一些論壇時(shí),常常要求啟用cookie,因?yàn)檫@些網(wǎng)站需要啟用cookie來記錄sessioin信息,這時(shí)需要選項(xiàng)-D,將cookie信息保存起來
>curl -o cpp.html -c len@cppblog.com[1].txt http://m.shnenglu.com
先前保存的cookie信息返回給網(wǎng)站,這通常會(huì)傳回你的一些用戶信息。
>curl -o cpp.html -c len@cppblog.com[2].txt -b len@cppblog.com[1].txt http://m.shnenglu.com
posted on 2008-06-21 16:33
len 閱讀(7210)
評(píng)論(1) 編輯 收藏 引用 所屬分類:
IT技術(shù)