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 ---> 下載下傳後: 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 要下載下傳(趙老師的電話朗誦

)
我們就可以用這樣的指令:
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
參考:http://lijunjie.iteye.com/blog/395270
本文轉自 1inux 51CTO部落格,原文連結:http://blog.51cto.com/1inux/1641271