everyday:linux curl
[TOC]
功能說(shuō)明
- curl 是一個(gè)功能強(qiáng)大的網(wǎng)絡(luò)工具,能夠通過(guò) http、ftp 等方式下載文件,也能夠上傳文件.類似的工具還有wget。
- curl 使用了
libcurl
庫(kù)來(lái)實(shí)現(xiàn)舵鳞,此庫(kù)常用在C程序中,用來(lái)處理HTTP請(qǐng)求琢蛤,curlpp 是 libcurl的一個(gè)C++封裝蜓堕,這幾個(gè)東西可以用在抓取網(wǎng)頁(yè)抛虏、網(wǎng)絡(luò)監(jiān)控等方面的開(kāi)發(fā),而 curl 命令可以幫助來(lái)解決開(kāi)發(fā)過(guò)程中遇到的問(wèn)題套才。
命令詳解
-
命令格式
curl [參數(shù)] [URL地址]
-
命令功能
通過(guò) http迂猴、ftp 等方式下載文件,也能夠上傳文件背伴,其實(shí) curl 遠(yuǎn)不止這些功能沸毁。
-
命令參數(shù)
-A 隨意指定自己這次訪問(wèn)所宣稱的自己的瀏覽器信息
-b/--cookie <name=string/file> cookie字符串或文件讀取位置,使用option來(lái)把上次的cookie信息追加到http request里面去
-c/--cookie-jar <file> 操作結(jié)束后把cookie寫入到這個(gè)文件中
-C/--continue-at <offset> 斷點(diǎn)續(xù)轉(zhuǎn)
-d/--data <data> HTTP POST方式傳送數(shù)據(jù)
-D/--dump-header <file> 把header信息寫入到該文件中
-F/--form <name=content> 模擬http表單提交數(shù)據(jù)
-v/--verbose 小寫的v參數(shù)傻寂,用于打印更多信息息尺,包括發(fā)送的請(qǐng)求信息,這在調(diào)試腳本是特別有用疾掰。
-m/--max-time <seconds> 指定處理的最大時(shí)長(zhǎng)
-H/--header <header> 指定請(qǐng)求頭參數(shù)
-s/--slient 減少輸出的信息搂誉,比如進(jìn)度
--connect-timeout <seconds> 指定嘗試連接的最大時(shí)長(zhǎng)
-x/--proxy <proxyhost[:port]> 指定代理服務(wù)器地址和端口,端口默認(rèn)為1080
-T/--upload-file <file> 指定上傳文件路徑
-o/--output <file> 指定輸出文件名稱
--retry <num> 指定重試次數(shù)
-e/--referer <URL> 指定引用地址
-I/--head 僅返回頭部信息静檬,使用HEAD請(qǐng)求
-u/--user <user[:password]> 設(shè)置服務(wù)器的用戶和密碼
-O 按照服務(wù)器上的文件名炭懊,自動(dòng)存在本地
-r/--range <range> 檢索來(lái)自HTTP/1.1或FTP服務(wù)器字節(jié)范圍
-T/--upload-file <file> 上傳文件
-
舉例
- eg1 抓取頁(yè)面內(nèi)容到一個(gè)文件中
// 將百度首頁(yè)內(nèi)容抓到 home.html 中
curl -o home.html http://baidu.com
// 由于A/B下的文件名都是001,002...巴柿,201凛虽,下載下來(lái)的文件重名死遭,這樣广恢,自定義出來(lái)下載下來(lái)的文件名,就變成了這樣:原來(lái): A/001.JPG —-> 下載后: 001_A.JPG 原來(lái): B/001.JPG ---> 下載后: 001_B.JPG
curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{A,B}/[001-201].JPG
+ eg2 用-O(大寫的)呀潭,后面的url要具體到某個(gè)文件钉迷,不然抓不下來(lái)。還可以用正則來(lái)抓取東西
curl -O http://www.baidu.com/img/bdlogo.gif
// 用正則下載screen1.jpg~screen10.jpg
curl -O http://XXXXX/screen[1-10].JPG
+ eg3 模擬表單信息钠署,模擬登錄糠聪,保存cookie信息
curl -c ./cookie_c.txt -F log=aaa -f pwd=*** http://www.XXXX.com/wp-login.php
+ eg4 模擬表單信息,模擬登錄谐鼎,保存頭信息
// -c(小寫)產(chǎn)生的cookie和-D里面的cookie是不一樣的
curl -D ./cookie_D.txt -F log=aaa -f pwd=*** http://www.XXXX.com/wp-login.php
+ eg5 使用cookie文件
curl -b ./cookie_c.txt http://www.XXXX.com/wp-admin
+ eg6 斷點(diǎn)續(xù)傳舰蟆,-C(大寫)
curl -C -O http://www.baidu.com/img/bdlogo.gif
+ eg7 傳送數(shù)據(jù),最好用登錄頁(yè)面測(cè)試,因?yàn)槟銈髦颠^(guò)去后狸棍,curl回抓數(shù)據(jù)身害,你可以看到你傳值有沒(méi)有成功
curl -d log=aaa http://www.XXXX.com/wp-login.php
+ eg8 顯示抓取錯(cuò)誤 `curl -f url`
curl -f http://www.XXXX.com/asdf
+ eg9 偽造來(lái)源地址,有的網(wǎng)站會(huì)判斷草戈,請(qǐng)求來(lái)源地址塌鸯,防止盜鏈
curl -e http://localhost http://www.XXXX.com/wp-login.php
+ eg10 當(dāng)經(jīng)常用curl去搞人家東西的時(shí)候,人家會(huì)把你的IP給屏蔽掉的,這個(gè)時(shí)候,我們可以用代理
curl -x 24.10.28.84:32779 -o home.html http://www.XXXX.com
+ eg11 比較大的東西唐片,我們可以分段下載
curl -r 0-100 -o img.part1 http://www.XXXX.com/wp-content/uploads/2010/09/compare_varnish.jpg
curl -r 100-200 -o img.part2 http://www.XXXX.com/wp-content/uploads/2010/09/compare_varnish.jpg
curl -r 200- -o img.part3 http://www.XXXX.com/wp-content/uploads/2010/09/compare_varnish.jpg
ls | grep part | xargs du -sh
cat image.part* > img.jpg
+ eg12 不顯示下載進(jìn)度信息 `curl -s`
curl -s -o aaa.jpg http://www.baidu.com/img/bdlogo.gif
+ eg13 顯示下載進(jìn)度條 `curl -0`
// 以http1.0協(xié)議請(qǐng)求
curl -0 http://www.baidu.com/img/bdlogo.gif
+ eg14 通過(guò) ftp 下載文件
curl -u 用戶名:密碼 -O http://www.XXXX.com/demo/curtain/bbstudy_files/style.css
curl -O ftp://用戶名:密碼@ip:port/demo/curtain/bbstudy_files/style.css
// ftp 上傳
curl -T test.sql ftp://用戶名:密碼@ip:port/demo/curtain/bbstudy_files/
+ eg15 模擬瀏覽器頭
curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.www.baidu.com
+ eg16 HTTP method: `PUT`丙猬、`GET`涨颜、`POST`
// HTTP PUT method
curl -T file.txt http://cgi2.tky.3web.ne.jp/~zz/abc.cgi
// http提交一個(gè)表單,比較常用的是POST模式和GET模式
// GET模式什么option都不用茧球,只需要把變量寫在url里面就可以了
curl http://www.yahoo.com/login.cgi?user=nick&password=12345
// POST模式的option則是 -d
curl -d "user=nick&password=12345" http://www.yahoo.com/login.cgi
# 一點(diǎn)需要注意的是庭瑰,POST模式下的文件上的文件上傳,比如
<form method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zz/up_file.cgi">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>
這樣一個(gè)HTTP表單抢埋,我們要用curl進(jìn)行模擬见擦,就該是這樣的語(yǔ)法:
curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zz/up_file.cgi
> 到底該用GET模式還是POST模式,要看對(duì)面服務(wù)器的程序設(shè)定羹令。