1. 程式人生 > >Unix下Curl的使用方法及常用功能記錄分享

Unix下Curl的使用方法及常用功能記錄分享

curl是利用URL語法在命令列方式下工作的檔案傳輸工具。鑑於curl在Linux及Unix命令符下的廣泛使用,所以想和大家分享一下如何使用這個具有傳奇性的好工具。

它支援很多協議:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 當然curl同樣支援HTTPS認證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證,HTTP上傳, 代理伺服器, cookies, 使用者名稱/密碼認證, 下載檔案斷點續傳,上載檔案斷點續傳,,http代理伺服器管道( proxy tunneling), 甚至它還支援IPv6, socks5代理伺服器,,通過http代理伺服器上傳檔案到FTP伺服器等等,功能十分強大。

到此大家可能會問我到底我們使用它可以幹什麼呢?我想告訴大家的是在字元介面下它的用處就顯示出來了,比如模擬使用者訪問、下載、登陸web系統、使用該函式自動化檢測你的服務是否正常、繞過伺服器盜鏈設定下載想要得資料、自動上傳或下載你想要得資料到你想儲存的位置等等。

現在我們大家一起來看看curl工具強大的功能吧!

一、http協議下的使用方法

一、訪問某站點驗證該站點是否提供正常的服務當然如果非80埠你在後端還要加上相應埠哦。 1)curl http://www.linuxidc.com

服務正常情況下返回1否則返回0 2)要想把讀過來頁面存下來可以這樣做 curl http://www.linuxidc.com > page.html

我們也可以用curl的內建option選項,存下http的結果,用這個option: -o curl -o page.html http://www.linuxidc.com 這樣,你就可以看到螢幕上出現一個下載頁面進度指示。等進展到100%,自然就OK啦。 3)使用curl的時候,用這個option可以指定http訪問所使用的proxy伺服器及其埠: -x curl -x 123.45.67.8Array:1080 -o page.html http://www.linuxidc.com 4)訪問有些網站的時候比較討厭,在設計時他們使用cookie來記錄session資訊。 像IE這樣的瀏覽器可以輕易處理cookie資訊,但我們的curl呢?我們來學習這個option: -D這個是把http的response裡面的cookie資訊存到一個特別的檔案中去. curl  -D cookieme.txt http://www.linuxidc.com 5)那麼,下一次訪問的時候,如何繼續使用上次留下的cookie資訊呢?要知道,很多網站都是靠監視你的cookie資訊,來判斷你是不是不按規矩訪問他們的網站的。這次我們使用這個option來把上次的cookie資訊追加到http request裡面去: -b curl  -D cookie0002.txt -b cookieme.txt http://www.linuxidc.com這樣,我們就可以幾乎模擬所有的IE操作,去訪問網頁了! 6)有些網站總要我們使用某些特定的瀏覽器去訪問他們,有時候更過分的是,還要使用某些特定的版本,怎麼辦呢?好在curl給我們提供了一個有用的option,可以讓我們隨意指定自己這次訪問所宣稱的自己的瀏覽器資訊: 那就是-A選項的功能 curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.8Array:1080 -o page.html -D cookieme.txt http://www.linuxidc.com 7)欺騙伺服器的安全設定盜取相關資源 curl給我們提供了設定referer的option: -e curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.8Array:1080 -e "mail.linuxidc.com" -o page.html -D cookieme.txt http://www.linuxidc.com 這樣,就可以騙對方的伺服器,你是從mail.linuxidc.com點選某個連結過來的了,呵呵呵 8)利用curl 下載檔案 剛才講過了,下載頁面到一個檔案裡,可以使用 -o ,下載檔案也是一樣。 比如, curl -o 1.jpg http://www.linuxidc.com/xx/c1.JPG 也可以用大寫的O,這麼用: curl -o 1.jpg http://www.linuxidc.com/xx/c1.JPG 這樣,就可以按照伺服器上的檔名,自動存在本地了! 再來一個更好用的如果screen1.JPG以外還有screen2.JPG、screen3.JPG、....、screen10.JPG需要下載,難不成還要讓我們寫一個script來完成這些操作? 在curl裡面,這麼寫就可以了: curl -O curl -o 1.jpg http://www.linuxidc.com/xx/c[1-10].JPG 由於zzh/nick下的檔名都是001,002...,201,下載下來的檔案重名,後面的把前面的檔案都給覆蓋掉了。沒關係,我們可以使用如下命令規避 curl -o #2_#1.jpg http://www.linuxidc.com/xx//[001-201].JPG 這是自定義檔名的下載。 #1是變數,指的是這部分,第一次取值zzh,第二次取值nick #2代表的變數,則是第二段可變部分---[001-201],取值從001逐一加到201 這樣,自定義出來下載下來的檔名,就變成了這樣: 原來: ~zzh/001.JPG ---> 下載後: 001-zzh.JPG 原來: ~nick/001.JPG ---> 下載後: 001-nick.JPG 這樣一來,就不怕檔案重名啦,呵呵 9)我們平時在windows平臺上,flashget這樣的工具可以幫我們分塊並行下載,還可以斷線續傳。 curl在這些方面也不輸給誰。比如我們下載screen1.JPG中,突然掉線了,我們就可以這樣開始續傳 curl -c -O curl -o 1.jpg http://www.linuxidc.com/xx/c1.JPG 二、上面講的都是http協議的下載,下面講一下ftp用法。 1)用法如下所示 curl -u name:passwd ftp://ip:port/path/file 或者大家熟悉的 curl ftp://name:

[email protected]:port/path/file 2)上傳的用法 上傳的option是 -T 比如我們向ftp傳一個檔案: curl -T localfile -u name:passwd ftp://uploadsite:port/path/ 當然,向http伺服器上傳檔案也可以 比如 curl -T localfile http://www.linuxidc.com/xx/1.jpg

三、GET和POST用法 1)http提交一個表單,比較常用的是POST模式和GET模式

GET模式什麼option都不用,只需要把變數寫在url裡面就可以了 比如:curl http://www.linuxidc.com/login.cgi?user=*****&password=**** 而POST模式的option則是 -d 比如,curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi 就相當於向這個站點發出一次登陸申請 四、curl還有很多技巧和用法 比如 https的時候使用本地證書,就可以這樣 curl -E localcert.pem  https://look.cn.*,大家不需要記住這些引數在今後需要使用的時候man curl 一下就好了。