天天看點

curl

可以看作指令行浏覽器

0. 不加host通路

curl -I  -H 'Host:test.i.com'  127.0.0.1

1、開啟gzip請求

curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte

2、監控網頁的響應時間

curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" "http://www.kklinux.com"

3. 監控站點可用性

curl -o /dev/null -s -w %{http_code} "http://www.kklinux.com"

4、以http1.0協定請求(預設為http1.1) 

curl -0 .............. 

      1)讀取網頁 

$ curl linuxidc.com">http://www.linuxidc.com 

2)儲存網頁 

  $ curl http://www.linuxidc.com > page.html $ curl -o page.html http://www.linuxidc.com 

3)使用的proxy伺服器及其端口:-x 

  $ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com 

4)使用cookie來記錄session資訊 

$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com 

option: -D 是把http的response裡面的cookie資訊存到一個特别的檔案中去,這樣,當頁面被存到page.html的同時,cookie資訊也被存到了cookie0001.txt裡面了 

    5)那麼,下一次通路的時候,如何繼續使用上次留下的cookie資訊呢? 

使用option來把上次的cookie資訊追加到http request裡面去:-b 

$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com 

     6)

      curl "http://test.qq.com/102/20202/snsvideodownload?filekey=302702010"  -x  test.qq.com.spdydns.com:80  

6)浏覽器資訊~~~~ 

随意指定自己這次通路所宣稱的自己的浏覽器資訊: -A

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.yahoo.com 

這樣,伺服器端接到通路的要求,會認為你是一個運作在Windows 2000上的IE6.0,嘿嘿嘿,其實也許你用的是蘋果機呢! 

而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"則可以告訴對方你是一台PC上跑着的Linux,用的是Netscape 4.73,呵呵呵 

7)

另外一個伺服器端常用的限制方法,就是檢查http通路的referer。比如你先通路首頁,再通路裡面所指定的下載下傳頁,這第二次通路的referer位址就是第一次通路成功後的頁面地 

址。這樣,伺服器端隻要發現對下載下傳頁面某次通路的referer位址不 是首頁的位址,就可以斷定那是個盜連了~~~~~ 

讨厭讨厭~~~我就是要盜連~~~~~!!

幸好curl給我們提供了設定referer的option: -e

curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt http://www.yahoo.com 

這樣,就可以騙對方的伺服器,你是從mail.yahoo.com點選某個連結過來的了,呵呵呵 

8)curl 下載下傳檔案 

剛才講過了,下載下傳頁面到一個檔案裡,可以使用 -o ,下載下傳檔案也是一樣。

比如, curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

這裡教大家一個新的option: -O

大寫的O,這麼用: curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

這樣,就可以按照伺服器上的檔案名,自動存在本地了! 

再來一個更好用的。

如果screen1.JPG以外還有screen2.JPG、screen3.JPG、....、screen10.JPG需要下載下傳,難不成還要讓我們寫一個script來完成這些操作?

不幹!

在curl裡面,這麼寫就可以了:

curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG 

呵呵呵,厲害吧?!~~~ 

9)

再來,我們繼續講解下載下傳!

curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG 

這樣産生的下載下傳,就是

~zzh/001.JPG

~zzh/002.JPG

...

~zzh/201.JPG

~nick/001.JPG

~nick/002.JPG

~nick/201.JPG 

夠友善的了吧?哈哈哈 

咦?高興得太早了。

由于zzh/nick下的檔案名都是001,002...,201,下載下傳下來的檔案重名,後面的把前面的檔案都給覆寫掉了~~~ 

沒關系,我們還有更狠的!

curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG 

--這是.....自定義檔案名的下載下傳?

--對頭,呵呵! 

#1是變量,指的是{zzh,nick}這部分,第一次取值zzh,第二次取值nick

#2代表的變量,則是第二段可變部分---[001-201],取值從001逐一加到201

這樣,自定義出來下載下傳下來的檔案名,就變成了這樣:

原來: ~zzh/001.JPG ---> 下載下傳後: 001-zzh.JPG

原來: ~nick/001.JPG ---> 下載下傳後: 001-nick.JPG 

這樣一來,就不怕檔案重名啦,呵呵 

繼續講下載下傳

我們平時在windows平台上,flashget這樣的工具可以幫我們分塊并行下載下傳,還可以斷線續傳。

curl在這些方面也不輸給誰,嘿嘿 

比如我們下載下傳screen1.JPG中,突然掉線了,我們就可以這樣開始續傳

curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG 

當然,你不要拿個flashget下載下傳了一半的檔案來糊弄我~~~~别的下載下傳軟體的半截檔案可不一定能用哦~~~ 

分塊下載下傳,我們使用這個option就可以了: -r

舉例說明

比如我們有一個http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下載下傳(趙老師的電話朗誦 :D )

我們就可以用這樣的指令:

curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\

curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\

curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\

curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 

這樣就可以分塊下載下傳啦。

不過你需要自己把這些破碎的檔案合并起來

如果你用UNIX或蘋果,用 cat zhao.part* > zhao.mp3就可以

如果用的是Windows,用copy /b 來解決吧,呵呵 

上面講的都是http協定的下載下傳,其實ftp也一樣可以用。

用法嘛,

curl -u name:passwd ftp://ip:port/path/file

或者大家熟悉的

curl ftp://name:passwd@ip:port/path/file 

10)上傳的option是 -T 

比如我們向ftp傳一個檔案: curl -T localfile -u name:passwd ftp://upload_site:port/path/ 

當然,向http伺服器上傳檔案也可以

比如 curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi

注意,這時候,使用的協定是HTTP的PUT method 

剛才說到PUT,嘿嘿,自然讓老服想起來了其他幾種methos還沒講呢!

GET和POST都不能忘哦。 

http送出一個表單,比較常用的是POST模式和GET模式 

GET模式什麼option都不用,隻需要把變量寫在url裡面就可以了

比如:

curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345 

而POST模式的option則是 -d 

比如,curl -d "user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi

就相當于向這個站點發出一次登陸申請~~~~~ 

到底該用GET模式還是POST模式,要看對面伺服器的程式設定。 

一點需要注意的是,POST模式下的檔案上的檔案上傳,比如

<form method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">

<input type=file name=upload>

<input type=submit name=nick value="go">

</form>

這樣一個HTTP表單,我們要用curl進行模拟,就該是這樣的文法:

curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi 

羅羅嗦嗦講了這麼多,其實curl還有很多很多技巧和用法

比如 https的時候使用本地證書,就可以這樣

curl -E localcert.pem https://remote_server 

再比如,你還可以用curl通過dict協定去查字典~~~~~

curl dict://dict.org/d:computer 

今天為了檢查所有刺猬主機上所有域名是否有備案.在使用wget不爽的情況下,找到了curl這個指令行流量器指令.發現其對post的調用還是蠻好的.特别有利于對送出資訊及變 

更參數進行較驗.對于我想将幾十萬域名到miibeian.gov.cn進行驗證是否有備案資訊非常有用.發現這篇文章很不錯,特為轉貼. 

我的目标:

curl -d "cxfs=1&ym=xieyy.cn" http://www.miibeian.gov.cn/baxx_cx_servlet 

在出來的資訊中進行過濾,提取備案号資訊,并設定一個辨別位.将域名,備案号及辨別位入庫 

用curl指令,post送出帶空格的資料 

今天偶然遇到一個情況,我想用curl登入一個網頁,無意間發現要post的資料裡帶空格。比如使用者名為"abcdef",密碼為"abc def",其中有一個空格,按照我以前的方式送出: 

curl -D cookie -d "username=abcdef&password=abc def" http://login.xxx.com/提示登入失敗。 

于是檢視curl手冊man curl。找到: 

d/--data (HTTP) Sends the speci?ed data in a POST request to the HTTP server, in a way that can emulate as if a user has ?lled in a HTML form and pressed the 

submit button. Note that the data is sent exactly as speci?ed with no extra processing (with all newlines cut off). The data is expected to be "url-encoded". 

This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to -F/--form. If this option is used 

more than once on the same command line, the data pieces speci?ed will be merged together with a separating &-letter. Thus, using ’-d name=daniel -d 

skill=lousy’ would generate a post chunk that looks like ’name=daniel&skill=lousy’. 

于是改用: 

curl -D cookie -d "username=abcdef" -d "password=abc efg" http://login.xxx.com/這樣就能成功登入了。 

(責任編輯:飄飛的夜)

Curl是Linux下一個很強大的http指令行工具,其功能十分強大。

1) 二話不說,先從這裡開始吧!

$ curl http://www.linuxidc.com

回車之後,www.linuxidc.com 的html就稀裡嘩啦地顯示在螢幕上了    ~

2) 嗯,要想把讀過來頁面存下來,是不是要這樣呢?

$ curl http://www.linuxidc.com > page.html

當然可以,但不用這麼麻煩的!

用curl的内置option就好,存下http的結果,用這個option: -o

$ curl -o page.html http://www.linuxidc.com

這樣,你就可以看到螢幕上出現一個下載下傳頁面進度訓示。等進展到100%,自然就 OK咯

3) 什麼什麼?!通路不到?肯定是你的proxy沒有設定了。

使用curl的時候,用這個option可以指定http通路所使用的proxy伺服器及其端口: -x

$ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com

4) 通路有些網站的時候比較讨厭,他使用cookie來記錄session資訊。

像IE/NN這樣的浏覽器,當然可以輕易處理cookie資訊,但我們的curl呢?.....

我們來學習這個option: -D <— 這個是把http的response裡面的cookie資訊存到一個特别的檔案中去

$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com

這樣,當頁面被存到page.html的同時,cookie資訊也被存到了cookie0001.txt裡面了

5)那麼,下一次通路的時候,如何繼續使用上次留下的cookie資訊呢?要知道,很多網站都是靠監視你的cookie資訊,來判斷你是不是不按規矩通路他們的網站的。

這次我們使用這個option來把上次的cookie資訊追加到http request裡面去: -b

$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com

這樣,我們就可以幾乎模拟所有的IE操作,去通路網頁了!

6)稍微等等    ~我好像忘記什麼了    ~

對了!是浏覽器資訊

有些讨厭的網站總要我們使用某些特定的浏覽器去通路他們,有時候更過分的是,還要使用某些特定的版本    NND,哪裡有時間為了它去找這些怪異的浏覽器呢!?

好在curl給我們提供了一個有用的option,可以讓我們随意指定自己這次通路所宣稱的自己的浏覽器資訊: -A

$ 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.linuxidc.com

這樣,伺服器端接到通路的要求,會認為你是一個運作在Windows 2000上的 IE6.0,嘿嘿嘿,其實也許你用的是蘋果機呢!

而"Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686"則可以告訴對方你是一台 PC上跑着的Linux,用的是Netscape 4.73,呵呵呵

7)另外一個伺服器端常用的限制方法,就是檢查http通路的referer。比如你先通路首頁,再通路裡面所指定的下載下傳頁,這第二次通路的 referer位址就是第一次通路成功後的頁面位址。這樣,伺服器端隻要發現對下載下傳頁面某次通路的referer位址不是首頁的位址,就可以斷定那是個盜 連了    ~

讨厭讨厭 ~我就是要盜連    ~!!

$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.linuxidc.com" -o page.html -D cookie0001.txt http://www.linuxidc.com

這樣,就可以騙對方的伺服器,你是從mail.linuxidc.com點選某個連結過來的了,呵呵呵

8)寫着寫着發現漏掉什麼重要的東西了!——- 利用curl 下載下傳檔案

剛才講過了,下載下傳頁面到一個檔案裡,可以使用 -o ,下載下傳檔案也是一樣。比如,

$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

這裡教大家一個新的option: -O 大寫的O,這麼用:

$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

這樣,就可以按照伺服器上的檔案名,自動存在本地了!

$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG

呵呵呵,厲害吧?! ~

9)再來,我們繼續講解下載下傳!

$ curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

~nick/201.JPG

夠友善的了吧?哈哈哈

由于zzh/nick下的檔案名都是001,002...,201,下載下傳下來的檔案重名,後面的把前面的檔案都給覆寫掉了 ~

$ curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

—這是.....自定義檔案名的下載下傳? —對頭,呵呵!

這樣,自定義出來下載下傳下來的檔案名,就變成了這樣:原來: ~zzh/001.JPG —-> 下載下傳後: 001-zzh.JPG 原來: ~nick/001.JPG —-> 下載下傳後: 001-nick.JPG

這樣一來,就不怕檔案重名啦,呵呵

本文轉自cloves 51CTO部落格,原文連結:http://blog.51cto.com/yeqing/1877718

繼續閱讀