在Linux中curl是一個(gè)利用URL規(guī)則在命令行下工作的文件傳輸工具蚊逢,可以說是一款很強(qiáng)大的http命令行工具,習(xí)慣稱url為下載工具。
用Web和FTP協(xié)議傳輸文件時(shí),URL應(yīng)用客戶端(curl命令)的功能與wget相近砚亭。不過,curl命令還能使用其他流行的協(xié)議傳輸文件殴玛,具體包括SSH協(xié)議(SCP和SFTP)钠惩、LDAP、DICT族阅、Telnet和文件。和wget支持大文件和遞歸下載不同膝捞,curl專為單步文件傳輸(single—shotfiletransfer)打造坦刀。
curl命令的用途廣泛,諸如下載蔬咬、發(fā)送各種HTTP請(qǐng)求鲤遥、指定HTTP頭部都不在話下。支持包括HTTP林艘、HTTPS 盖奈、FTP 在內(nèi)的眾多協(xié)議。它還支持POST狐援、cookie 钢坦、認(rèn)證究孕、從指定偏移處下載部分文件、參照頁(referer )爹凹、用戶代理字符串厨诸、擴(kuò)展頭部、限速禾酱、文件大小限制微酬、進(jìn)度條等特性。用法格式
curl[option] URL
基本用法:
無選項(xiàng)參數(shù)
[NSOS1.1 ~]# curl www.baidu.com??? ???????????#將URL首頁html打印出來颤陶,默認(rèn)打印到STDOUT中
?????? 當(dāng)我們不加任何選項(xiàng)使用 curl 時(shí)颗管,默認(rèn)會(huì)發(fā)送 GET 請(qǐng)求將下載的文件輸出到終端(所下載的數(shù)據(jù)被寫入stdout)。
-i選項(xiàng)
?????? 下載的文件和響應(yīng)頭信息同時(shí)打印到stdout滓走。
-I 選項(xiàng)
打印響應(yīng)頭部信息垦江,只打印響應(yīng)頭部(response? header)有助于進(jìn)行各種檢查或統(tǒng)計(jì)。例如闲坎,如果要檢查某個(gè)頁面是否能夠打開疫粥,并不需要下載整個(gè)頁面內(nèi)容。只用讀取HTTP響應(yīng)頭部就能夠知道這個(gè)頁面是否可用腰懂。
通過-I或--head 就可以只打印HTTP頭部信息梗逮,而無須下載遠(yuǎn)程文件。
[root@localhost~]# curl -I www.baidu.com??????????
HTTP/1.1200 OK
Accept-Ranges:bytes
Cache-Control:private, no-cache, no-store, proxy-revalidate, no-transform
Connection:Keep-Alive
Content-Length:277
Content-Type:text/html
Date:Mon, 15 Jul 2019 05:22:05 GMT
Etag:"575e1f60-115"
Last-Modified:Mon, 13 Jun 2016 02:50:08 GMT
Pragma:no-cache
Server:bfe/1.0.8.18
-k選項(xiàng)
?? 允許不使用證書到SSL站點(diǎn)
[NSOS
1.1 ~]# curl -k https://10.203.10.39??? #將URL首頁html打印出來绣溜,默認(rèn)打印到STDOUT中
-O選項(xiàng)
使用URL中默認(rèn)的文件名保存文件到本地慷彤,如果不將網(wǎng)頁或文件寫入stdout,就要使用-O選項(xiàng)將其寫入和URL中所指定的文件名稱相同的文件中怖喻。
如果在URL中找不到文件名底哗,則會(huì)產(chǎn)生錯(cuò)誤,因此要確保URL 指向的是遠(yuǎn)程文件锚沸。如
[root@localhost~]# curl -k -O www.baidu.com
curl:Remote file name has no length!
?
[root@localhost~]# curl?-Ohttp://swf.ishare.down.sina.com.cn/7edhKNThu1.jpg???#下載的文件命名為7edhKNThu1.jpg
? % Total???% Received % Xferd? AverageSpeed?? Time??? Time????Time? Current
???????????????????????????????? Dload? Upload??Total?? Spent??? Left?Speed
100?? 265???0?? 265??? 0????0??? 911????? 0 --:--:-- --:--:-- --:--:--?? 913
我們也可以使用-o選項(xiàng)來手動(dòng)指定文件名跋选。
-o選項(xiàng)
將文件保存為命令行中指定的文件名的文件中
[NSOS1.1 ~]# curl -k -o 88.html www.baidu.com??????#URL首頁html文件保存在執(zhí)行curl命令所在的路徑下
-H 選項(xiàng)
自定義請(qǐng)求頭信息,當(dāng)我們需要傳遞特定的header 的時(shí)候哗蜈,可以仿照以下命令來寫:
curl -H “Referer: www.example.com” -H
“User-Agent: Custom-User-Agent”?http://www.baidu.com
-D選項(xiàng)
保存http的response里面的header信息
1.1 ~]# curl -k -D resheader.txt https://10.203.10.88
[NSOS1.1 ~]# cat resheader.txt
HTTP/1.1200 OK
Date:Wed, 02 Mar 2016 08:49:59 GMT
Server:Apache
Set-Cookie:PHPSESSID=qofetdbqlev0dbhlv9p16sefv7; path=/; HttpOnly
Content-Length:5060
Connection:close
Content-Type:text/html; charset=UTF-8
-c選項(xiàng)
保存http的response里面的cookie信息
[NSOS1.1 ~]# curl -k -c 88.cookie https://10.203.10.88
-m選項(xiàng)
設(shè)置最大傳輸時(shí)間
-E
客戶端證書文件和密碼 (SSL)
限定帶寬
如果帶寬有限前标,又有多個(gè)用戶共享,為了平穩(wěn)流暢地分享帶寬距潘,我們可以用--limit-rate
限制cURL的下載速度:
$ curlURL --limit-rate 20k
在命令中用k(千字節(jié))和m (兆字節(jié))指定下載速度限制炼列。
認(rèn)證
可以用cURL的選項(xiàng)?-u完成HTTP或FTP 認(rèn)證。 -u username:password可用來指定用戶名和密碼音比。它也可以不指定密碼俭尖,而在后續(xù)的執(zhí)行過程中按照提示輸入密碼。例如:
$ curl-u user:pass http://test_auth.com
-d選項(xiàng)
可以很容易使用-d選項(xiàng)模擬發(fā)送POST請(qǐng)求并讀取網(wǎng)站的響應(yīng)(HTML 格式)
$ curl-d "postvar=postdata2&postvar2=postdata2"???URL
-d表示以POST 方式提交用戶數(shù)據(jù)。-d參數(shù)的內(nèi)容應(yīng)該以引用的形式給出稽犁。否則焰望,& 會(huì)被shell 解讀為該命令需要作為后臺(tái)進(jìn)程運(yùn)行。
-X
curl 默認(rèn)的 HTTP 動(dòng)詞是 GET缭付,使用?-X?參數(shù)可以支持其他動(dòng)詞柿估。如head
[root@localhostnewtest]# curl -I -X?HEAD"www.baidu.com"
HTTP/1.1200 OK
Accept-Ranges:bytes
Cache-Control:private, no-cache, no-store, proxy-revalidate, no-transform
Connection:Keep-Alive
Content-Length:277
Content-Type:text/html
Date:Wed, 17 Jul 2019 01:53:39 GMT
Etag:"575e1f60-115"
Last-Modified:Mon, 13 Jun 2016 02:50:08 GMT
Pragma:no-cache
Server:bfe/1.0.8.18
-L
允許URL重定向,如果直接使用 curl 打開某些需要被重定向后的URL陷猫,這種情況下就無法獲取我們想要的網(wǎng)頁內(nèi)容秫舌。例如:
[root@localhost~]# curl http://codebelief.com
301Moved Permanently
301Moved Permanently
nginx/1.15.6
[root@localhost~]#
而當(dāng)我們通過瀏覽器打開該鏈接時(shí),會(huì)自動(dòng)跳轉(zhuǎn)到http://www.codebelief.com绣檬。此時(shí)我們想要 curl 做的足陨,就是像瀏覽器一樣跟隨鏈接的跳轉(zhuǎn),獲取最終的網(wǎng)頁內(nèi)容娇未。我們可以在命令中添加 -L 選項(xiàng)來跟隨鏈接重定向:
curl-L http://codebelief.com
這樣我們就能獲取到經(jīng)過重定向后的網(wǎng)頁內(nèi)容了墨缘。
-c\-b選項(xiàng)
有些網(wǎng)站是使用cookie來記錄session信息。對(duì)于chrome這樣的瀏覽器零抬,可以輕易處理cookie信息镊讼,在curl中只要增加相關(guān)參數(shù)也是可以很容易的處理cookie的。如保存http的response里面的cookie信息平夜,使用內(nèi)置option:-c(小寫)
curl-c cookiec.txt http://www.linux.com
執(zhí)行后cookie信息就被存到了cookiec.txt里面了蝶棋。
很多網(wǎng)站都是通過監(jiān)視你的cookie信息來判斷你是否按規(guī)矩訪問他們的網(wǎng)站的,因此我們需要使用保存的cookie信息忽妒。內(nèi)置option: -b
-b cookiec.txt?http://www.linux.com