linux curl命令用(yong)法簡介
時間:2019-06-03 來源:華清遠見
在linux中,curl 命令(ling)是(shi)一(yi)個利用URL規則在命令(ling)行下(xia)(xia)(xia)工(gong)作的文(wen)件(jian)傳(chuan)輸工(gong)具(ju)(ju)。curl 支(zhi)(zhi)持(chi)文(wen)件(jian)的上(shang)傳(chuan)和下(xia)(xia)(xia)載,所以是(shi)綜合傳(chuan)輸工(gong)具(ju)(ju),但習慣性的稱curl為(wei)下(xia)(xia)(xia)載工(gong)具(ju)(ju)。作為(wei)一(yi)款(kuan)強力工(gong)具(ju)(ju),curl支(zhi)(zhi)持(chi)包(bao)括HTTP、HTTPS、FTP等眾多協議(yi),還支(zhi)(zhi)持(chi) GET、POST、cookies、認證(zheng)、從指(zhi)定偏移(yi)處(chu)下(xia)(xia)(xia)載部分(fen)文(wen)件(jian)、用戶代理字符串、限速、文(wen)件(jian)大小、進度條等特征,還可以做網(wang)頁(ye)處(chu)理流程和數據檢索(suo)自動(dong)化(hua)。
一、curl命令安裝
默認在(zai)linux(ubuntu)下curl沒有安裝,需要輸入sudo apt-get install curl命令安裝
二、curl命令語法
curl [option] [url]
(1)option為操(cao)作命(ming)(ming)令,常用命(ming)(ming)令有(you):
-A/--user-agent <string> 設置用戶代理發送給服務器
-b/--cookie <name=string/file> cookie字符串(chuan)或文件讀(du)取位(wei)置
-c/--cookie-jar <file> 操作結束后(hou)把cookie寫(xie)入到這個文件中(zhong)
-C/--continue-at <offset> 斷點續(xu)轉
-D/--dump-header <file> 把(ba)header信息(xi)寫入到該(gai)文件中
-e/--referer 來源網址
-f/--fail 連(lian)接失(shi)敗時不(bu)顯示http錯誤
-o/--output 把輸出寫到(dao)該文件中(zhong)
-O/--remote-name 把(ba)輸出寫到該(gai)文(wen)件中,保留遠程(cheng)文(wen)件的(de)文(wen)件名(ming)
-r/--range <range> 檢索來自(zi)HTTP/1.1或FTP服務器(qi)字(zi)節范(fan)圍
-s/--silent 靜音(yin)模式(shi)。不輸(shu)出任(ren)何東西
-T/--upload-file <file> 上傳文件(jian)
-u/--user <user[:password]> 設置服務器的用戶和密(mi)碼
-w/--write-out [format] 什么輸出(chu)完成后
-x/--proxy <host[:port]> 在給定的(de)端口上使用HTTP代理
-#/--progress-bar 進度條顯示當前的傳送狀態
(2)url為具體的網(wang)頁地址
例如://www.gnu.org/software/gettext/manual/gettext.html
三、Curl命令使用方法
1.保存下載文件(jian)
(1)下載單個(ge)文件(jian)
(2)使用-o(小寫(xie))參數,可下(xia)載到本地并重(zhong)命(ming)名
(3)使用(yong)-O(大寫)參數(shu),將(jiang)文件保(bao)存到本地并命名為gettext.html
(4)使用(yong)重定向(xiang)功(gong)能(neng)保存
2.斷點續傳
curl能夠從特定的文件偏移(yi)處繼續下載,它可以(yi)通(tong)過指定一個偏移(yi)量(liang)來下載部(bu)分文件:
當文件在(zai)下載完(wan)成(cheng)之前結(jie)束該進程,使用-C(大寫)參數例(li)如:
當文件在(zai)下載完成之前結束該(gai)進程:
$ curl -O //www.gnu.org/software/gettext/manual/gettext.html3
############## 20.1%
通過添加-C選項(xiang)繼續對(dui)該(gai)文件進行下載,已經下載過的文件不會被重新下載
curl -C - -O //www.gnu.org/software/gettext/manual/gettext.html7
############### 21.1%
3.測試(shi)網(wang)頁返回值(zhi)
在腳(jiao)本(ben)中(zhong),這是很常(chang)見的測試網站是否正常(chang)的用
4.指定(ding)proxy服務器以及(ji)其端口
很多時候上網需要(yao)用到(dao)代(dai)(dai)理服務器(比如是(shi)使用代(dai)(dai)理服務器上網或者因為使用curl別人(ren)網站而被別人(ren)屏蔽IP地址的時候),幸運的是(shi)curl通(tong)過(guo)使用內置(zhi)option:-x來支持設置(zhi)代(dai)(dai)理
curl -x 192.168.100.100:1080 //www.gnu.org/software/gettext/manual/gettext.html
5.cookie
有(you)些網站是使用cookie來記錄(lu)session信息。對(dui)于chrome這(zhe)樣的瀏覽(lan)器(qi),可以輕(qing)易處理cookie信息,但在curl中只要增(zeng)加相關參(can)數也是。
(1)保存http的response里(li)面的cookie信息,使用-c
有(you)些網(wang)站是使用cookie來記錄session信息。對于chrome這樣(yang)的瀏覽器(qi),可以輕易處理cookie信息,但在(zai)curl中只要增加相關(guan)參數也是可以很容易的處理cookie,例(li)如:
Cookiec.txt內容如下(xia):
(2)保(bao)存(cun)http的response里(li)面的header信(xin)息。使用 -D
Cookiec.txt內容如下:
6.從(cong)FTP服務器下(xia)載文件
curl同(tong)樣支持FTP下載(zai),若在url中指定的(de)是某個文件路徑而非具體的(de)某個要下載(zai)的(de)文件名(ming),CURL則會列出該目(mu)錄下的(de)所(suo)有文件名(ming)而并非下載(zai)該目(mu)錄下的(de)所(suo)有文件,例如(ru):
列出public_html下的所有文件夾和文件
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
下載(zai)xss.php文件(jian)
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php
7.上(shang)傳文件到FTP服務器(qi)
curl通過 -T 選項可將指(zhi)定的(de)本(ben)地文(wen)件上傳到FTP服務器(qi)上
# 將myfile.txt文(wen)件上(shang)傳到(dao)服務器(qi)
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
# 同(tong)時上傳多個文(wen)件(jian)
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
# 從標(biao)準輸入獲(huo)取內(nei)容保存到服(fu)務器指(zhi)定(ding)的文(wen)件(jian)中(zhong)
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
8.詞典
(1)查詢bash單詞(ci)的(de)含義
(2)列(lie)出(chu)所有詞(ci)典
9.傳遞請(qing)求數據(ju)
默認curl使用(yong)GET方(fang)(fang)(fang)式(shi)請求數據,這種方(fang)(fang)(fang)式(shi)下直(zhi)接(jie)通(tong)過(guo)URL傳遞(di)數據,可以通(tong)過(guo) --data/-d 方(fang)(fang)(fang)式(shi)指定使用(yong)POST方(fang)(fang)(fang)式(shi)傳遞(di)數據,例(li)如:
GET:
curl -u username //api.github.com/user?access_token=XXXXXXXXXX
POST:
curl -u username --data "param1=value1¶m2=value" //api.github.com
也可以指定一個(ge)文件,將該(gai)文件中的內容當作數據傳(chuan)遞給服務器端
curl --data @filename //github.api.com/authorizations
注:默(mo)認情況下,通過POST方式傳遞過去(qu)的(de)數據中(zhong)(zhong)若有特(te)殊字符,首先需要(yao)將(jiang)特(te)殊字符轉義在傳遞給服務器端(duan),如value值中(zhong)(zhong)包含有空(kong)格(ge)(ge),則需要(yao)先將(jiang)空(kong)格(ge)(ge)轉換成(cheng)%20,如:
curl -d "value%201" //hostname.com
在新版本的CURL中,提(ti)供了新的選(xuan)項 --data-urlencode,通(tong)過該(gai)選(xuan)項提(ti)供的參數會自動轉義特殊(shu)字符。
curl --data-urlencode "value 1" //hostname.com
除(chu)了使用GET和(he)POST協(xie)議(yi)外,還可以通過 -X 選項指(zhi)定其它協(xie)議(yi),如:
curl -I -X DELETE //api.github.cim
上傳文件:
curl --form "fileupload=@filename.txt" //hostname/resource

