????????在Linux中curl是一個利用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請求塞祈、指定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)會發(fā)送 GET 請求將下載的文件輸出到終端(所下載的數(shù)據(jù)被寫入stdout)芳杏。
-i選項(xiàng)
?????? 下載的文件和響應(yīng)頭信息同時(shí)打印到stdout。
-I 選項(xiàng)
????????打印響應(yīng)頭部信息辟宗,只打印響應(yīng)頭部(response? header)有助于進(jìn)行各種檢查或統(tǒng)計(jì)爵赵。例如,如果要檢查某個頁面是否能夠打開泊脐,并不需要下載整個頁面內(nèi)容空幻。只用讀取HTTP響應(yīng)頭部就能夠知道這個頁面是否可用。
通過-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中找不到文件名供置,則會產(chǎn)生錯誤谨湘,因此要確保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)來手動指定文件名芥丧。
-o選項(xiàng)
????????將文件保存為命令行中指定的文件名的文件中
[NSOS1.1 ~]# curl -k -o 88.html www.baidu.com??????#URL首頁html文件保存在執(zhí)行curl命令所在的路徑下
-H 選項(xià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)
限定帶寬
????????如果帶寬有限续担,又有多個用戶共享擅耽,為了平穩(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請求并讀取網(wǎng)站的響應(yīng)(HTML 格式)
$ curl-d "postvar=postdata2&postvar2=postdata2"???URL
????????-d表示以POST 方式提交用戶數(shù)據(jù)航夺。-d參數(shù)的內(nèi)容應(yīng)該以引用的形式給出。否則崔涂,& 會被shell 解讀為該命令需要作為后臺進(jìn)程運(yùn)行阳掐。
-X
????????curl 默認(rèn)的 HTTP 動詞是 GET,使用?-X參數(shù)可以支持其他動詞冷蚂。如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í)艺骂,會自動跳轉(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信息忧额。對于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://xxxx.xxx.xxx.xxx.com
????????輸入用戶名和密碼后發(fā)生了URL重定向恬涧。這個需要使用-L來跟蹤重定向注益,而向重定向地址請求時(shí),需要攜帶cookie信息溯捆,這需要使用-b選項(xiàng)。因此這個登錄過程命令為
[root@localhost~]# curl -v -c logincook.txt -b logincook.txt -d'username=dddd&password=xxxxx' -L http://xxx.xx.x.x/login/
-v(verbose)
????????用來顯示詳細(xì)信息厦瓢,顯示一次 http 通信的整個過程提揍,包括端口連接和 http request 頭信息,即把請求和響應(yīng)都打印出來煮仇,這樣便于調(diào)試劳跃。