天天看點

Curl指令簡單使用

curl指令

            curl是基于URL文法在指令行方式下工作的檔案傳輸工具,它支援FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等協定。curl支援HTTPS認證,并且支援HTTP的POST、PUT等方法, FTP上傳, kerberos認證,HTTP上傳,代理伺服器, cookies, 使用者名/密碼認證, 下載下傳檔案斷點續傳,上載檔案斷點續傳,,http代理伺服器管道( proxy tunneling), 甚至它還支援IPv6,socks5代理伺服器,,通過http代理伺服器上傳檔案到FTP伺服器等等,功能十分強大。

curl [options] [URL...]

     curl的常用選項:

                -A/--user-agent <string> 設定使用者user-agent發送給伺服器

                -basic 使用HTTP基本認證

                --tcp-nodelay 使用TCP_NODELAY選項

                -e/--referer <URL> 來源網址

                --cacert <file> CA憑證 (SSL)

                --compressed 要求傳回是壓縮的格式

                -H/--header <line>自定義頭資訊傳遞給伺服器

                -I/--head 隻顯示響應封包首部資訊

                --limit-rate <rate> 設定傳輸速度

                -u/--user <user[:password]>設定伺服器的使用者和密碼

                -0/--http1.0 使用HTTP 1.0    

      用法:curl [options] [URL...]

<code>[root@1inux ~]# curl  http:</code><code>//192.168.65.80</code>

<code>[root@1inux ~]# curl -A </code><code>"I LOVE CHINA"</code>  <code>http:</code><code>//192.168.65.80</code>

<code>log:</code>

<code>[root@1inux ~]# tail -2 /</code><code>var</code><code>/log/httpd/access_log</code>

<code>192.168.65.80 - - [29/Mar/2015:10:46:26 +0800] </code><code>"GET / HTTP/1.1"</code> <code>200 915 </code><code>"-"</code> <code>"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 </code>

<code>NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"</code>

<code>192.168.65.80 - - [29/Mar/2015:10:46:29 +0800] </code><code>"GET / HTTP/1.1"</code> <code>200 915 </code><code>"-"</code> <code>"I LOVE CHINA"</code>

<code>[root@1inux ~]# curl   http:</code><code>//192.168.65.80</code>

<code>[root@1inux ~]# curl -e </code><code>"www.gov.cn"</code>  <code>http:</code><code>//192.168.65.80</code>

<code>192.168.65.80</code>

<code> </code><code>- - [29/Mar/2015:10:58:40 +0800] </code><code>"GET / HTTP/1.1"</code> <code>200 915 </code><code>"-"</code> 

<code>"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 </code>

<code>zlib/1.2.3 libidn/1.18 libssh2/1.4.2"</code>

<code>192.168.65.80 - - </code>

<code>[29/Mar/2015:10:58:43 +0800] </code><code>"GET / HTTP/1.1"</code> <code>200 915 </code><code>"www.gov.cn"</code> 

擷取響應封包頭資訊

<code>[root@1inux ~]# curl -I http:</code><code>//192.168.65.80</code>

<code>HTTP/1.1 200 OK</code>

<code>Date</code><code>: Sun, 29 Mar 2015 02:45:06 GMT</code>

<code>Server: Apache/2.2.15 (CentOS) DAV/2</code>

<code>Connection: close</code>

<code>Content-Type: text/html;charset=UTF-8</code>

----------------------------------------------------

以下内容來源:http://lijunjie.iteye.com/blog/395270

寫着寫着發現漏掉什麼重要的東西了!----- 利用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/~/[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/~/[001-201].JPG

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

--對頭,呵呵!

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

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

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

原來: ~zzh/001.JPG ---&gt; 下載下傳後: 001-zzh.JPG

原來: ~nick/001.JPG ---&gt; 下載下傳後: 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 要下載下傳(趙老師的電話朗誦

Curl指令簡單使用

 )

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

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

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

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

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

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

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

如果你用UNIX或蘋果,用 cat zhao.part* &gt; 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&amp;password=12345

而POST模式的option則是 -d

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

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

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

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

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

&lt;input type=file name=upload&gt;

&lt;input type=submit name=nick value="go"&gt;

&lt;/form&gt;

這樣一個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  

參考:http://lijunjie.iteye.com/blog/395270

本文轉自 1inux 51CTO部落格,原文連結:http://blog.51cto.com/1inux/1641271

繼續閱讀