Essential Curl

什么是curl


curl是我們?cè)贚inux下常用的下載文件或者測(cè)試web服務(wù)的工具阅畴,羅列下他們常
用的一些場(chǎng)景,當(dāng)做總結(jié)却汉。curl支持多種網(wǎng)絡(luò)協(xié)議,包括最新的HTTP/2廊酣。

獲取網(wǎng)頁源碼


~> curl www.google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A >here</A>.
</BODY></HTML>

文件下載


curl缺省會(huì)輸出文件的內(nèi)容锉罐,用下面的命令可以用curl將文件保存到指定的目錄帆竹,curl比較苦逼的地方在于,
如果不是保存當(dāng)前目錄脓规,需要自己指定要保存的文件名栽连。

~> cd /opt/ && curl -O http://ergonlogic.com/files/boxes/debian-current.box
~> curl -o /opt/current.box http://ergonlogic.com/files/boxes/debian-current.box

多線程下載


curl不支持多線程下載,我用過的一個(gè)多線程下載的工具是aria2侨舆,蠻好用的秒紧,而且這貨還支持bt,ed2k等p2p協(xié)議下載。

~> aria2c -x5 https://github.com/jose-lpa/veewee-openbsd/releases/download/v0.5.5/openbsd55.box

通過代理訪問資源


有兩種方式可以讓curl使用proxy挨下,第一種是通過設(shè)置環(huán)境變量熔恢,http_proxy, https_proxy等,用no_proxy去設(shè)置屏蔽代理的列表臭笆。

~> export http_proxy="http://proxy:3128"

讓proxy對(duì)一些地址無效叙淌。

~> export no_proxy="127.0.0.1,localhost.localdomain"

另外一種是在運(yùn)行命令時(shí)直接指定使用的proxy或者不使用proxy。

~> curl -x "http://proxy:3128" www.google.com
~> curl -x "socks5://proxy:3128" www.google.com
~> curl --noproxy * www.google.com

curl的--noproxy是需要指定一個(gè)exclude的列表愁铺。

花式下載和斷點(diǎn)續(xù)傳


對(duì)于很規(guī)則的下載url鹰霍,可以通配符或者正則來處理,比如我想下載自己博客的幾個(gè)圖片茵乱。

~> curl -O http://iambowen.github.io/images/[1-3].png

[1/3]: http://iambowen.github.io/images/1.png --> 1.png
--_curl_--http://iambowen.github.io/images/1.png
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100  222k  100  222k    0     0  59816      0  0:00:03  0:00:03 --:--:-- 59808

[2/3]: http://iambowen.github.io/images/2.png --> 2.png
--_curl_--http://iambowen.github.io/images/2.png
100  342k  100  342k    0     0  33117      0  0:00:10  0:00:10 --:--:-- 48607

[3/3]: http://iambowen.github.io/images/3.png --> 3.png
--_curl_--http://iambowen.github.io/images/3.png
100  208k  100  208k    0     0  32245      0  0:00:06  0:00:06 --:--:-- 39914

斷點(diǎn)續(xù)傳,除了保證文件完整性茂洒,還可以檢查文件是否有變動(dòng),如果有變化則更新似将,沒有則保持文件原有狀態(tài)获黔。

~> curl -O -C http://ergonlogic.com/files/boxes/debian-current.box

獲取headers信息


有時(shí)候,我們只需要看到返回的headers信息在验,查看cache是否命中玷氏,或者返回碼。

~> curl -I www.baidu.com
HTTP/1.1 200 OK
Date: Tue, 10 Feb 2015 08:25:12 GMT
Content-Type: text/html; charset=utf-8
Connection: Keep-Alive
......

傳說使用telnet命令可能拿到更多的http headers信息腋舌,無法驗(yàn)證盏触,方式如下。

~> telnet 0 4000
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
GET / HTTP/1.1
HOST: 127.0.0.1:4000

HTTP/1.1 200 OK
Etag: 232a2c-320c-54d9ce22
Content-Type: text/html
Content-Length: 12812
Last-Modified: Tue, 10 Feb 2015 09:23:46 GMT
Server: WEBrick/1.3.1 (Ruby/1.9.3/2014-11-13)
Date: Tue, 10 Feb 2015 09:29:24 GMT
Connection: Keep-Alive

follow redirection信息


有時(shí)候訪問的資源块饺,可能被臨時(shí)或者永久轉(zhuǎn)移赞辩,所以會(huì)有中間跳轉(zhuǎn)的過程,但是直接去curl是拿不到完整信息的授艰。

~> curl -I www.google.com
HTTP/1.1 302 Found
Location: http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/%3Fgws_rd%3Dcr&ust=1423564147298386&usg=AFQjCNHZ7kXJXOfOQyCSOQ6ZGOPjeVaIYg
Cache-Control: private
Content-Type: text/html; charset=UTF-8
......

通過下面的方式可以拿到所有的返回信息辨嗽。

~> curl -LI www.google.com
HTTP/1.1 302 Found
Location: http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/%3Fgws_rd%3Dcr&ust=1423559822825114&usg=AFQjCNEEY2qyq9HghaQVZ89ugMv9kvDlLA
......

HTTP/1.1 302 Found
Location: http://www.google.com.hk/?gws_rd=cr
......

HTTP/1.1 200 OK
Date: Tue, 10 Feb 2015 09:16:35 GMT
Expires: -1
......

加入驗(yàn)證的請(qǐng)求


有時(shí)候在請(qǐng)求一些資源時(shí),需要通過驗(yàn)證才能完成訪問淮腾,可以用username:password加URL即可糟需。

~> curl http://user:password@echo.httpkit.com?queryString

偽裝user agent的請(qǐng)求


有的服務(wù)器可能會(huì)限制訪問的User-Agent類型,用curl測(cè)試的時(shí)候可以用相應(yīng)得參數(shù)進(jìn)行偽裝谷朝。

~> curl  echo.httpkit.com
 "headers": {
   "host": "echo.httpkit.com",
   "user-agent": "curl/7.37.1",
   "accept": "*/*"
}

~>  curl -A "Bad Ass"  echo.httpkit.com
 "headers": {
   "host": "echo.httpkit.com",
   "user-agent": "Bad Ass",
   "accept": "*/*"
 },

發(fā)起HTTP請(qǐng)求


-X可以指定發(fā)起請(qǐng)求的HTTP方法, 如果用POST或者PUT等方法洲押,可以用 -d指定request body,-H可以指定請(qǐng)求的一些Headers圆凰。

~> curl -X PUT -H 'Content-Type: application/json' -d '{"firstName":"Kris", "lastName":"Jordan"}' echo.httpkit.com
{
 "method": "PUT",
 "uri": "/",
 "path": {
   "name": "/",
   "query": "",
   "params": {}
 },
 "headers": {
   "x-forwarded-for": "210.74.157.146",
   "host": "echo.httpkit.com",
   "user-agent": "curl/7.37.1",
   "accept": "*/*",
   "content-type": "application/json",
   "content-length": "41"
 },
 "body": "{\"firstName\":\"Kris\", \"lastName\":\"Jordan\"}",
 "ip": "127.0.0.1",
 "powered-by": "http://httpkit.com",
 "docs": "http://httpkit.com/echo"
 }

上傳文件


~> curl --form "fileupload=@filename.txt" http://hostname/resource

處理cookies


保存cookies到本地

 ~> curl -c echo.cookies  http://www.baidu.com > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 88672    0 88672    0     0   298k      0 --:--:-- --:--:-- --:--:--  297k
 ~> less echo.cookies
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

.baidu.com      TRUE    /       FALSE   3571557287      BAIDUID 287BE3DB1621FDE977C39D21BD02CA45:FG=1
.baidu.com      TRUE    /       FALSE   3571557287      BAIDUPSID       287BE3DB1621FDE977C39D21BD02CA45
www.baidu.com   FALSE   /       FALSE   0       BDSVRTM 0
www.baidu.com   FALSE   /       FALSE   0       BD_HOME 0
.baidu.com      TRUE    /       FALSE   0       H_PS_PSSID      10422_1449_11089

使用cookie 發(fā)起請(qǐng)求

~> curl -b echo.cookies  http://www.baidu.com > /dev/null

fail on error


對(duì)于服務(wù)器端錯(cuò)誤杈帐,http請(qǐng)求沒有任何輸出,curl的返回為0专钉,使用-f參數(shù)可以在遇到服務(wù)器錯(cuò)誤是返回非0(22)挑童。
最近在完成一個(gè)用Bamboo host的package去部署的任務(wù)的時(shí)候用到了這個(gè)參數(shù),一旦下載package出錯(cuò)跃须,部署會(huì)中斷炮沐。

~> curl -f http://iambowen.github.io/ksjdkfsjdf
curl: (22) The requested URL returned error: 404 Not Found
~> echo $?
22

從瀏覽器"偷取"curl的命令


覺得curl指令太難記憶,可以直接從瀏覽器中"偷"取回怜, Chrome的Developer Tools里面提供了這樣的功能大年,右鍵點(diǎn)擊請(qǐng)求的url,可以提取出curl完整的curl請(qǐng)求玉雾。

References


1
2
3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翔试,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子复旬,更是在濱河造成了極大的恐慌垦缅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驹碍,死亡現(xiàn)場(chǎng)離奇詭異壁涎,居然都是意外死亡凡恍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門怔球,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚼酝,“玉大人,你說我怎么就攤上這事竟坛∶龉” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵担汤,是天一觀的道長(zhǎng)涎跨。 經(jīng)常有香客問我,道長(zhǎng)崭歧,這世上最難降的妖魔是什么隅很? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮率碾,結(jié)果婚禮上外构,老公的妹妹穿的比我還像新娘。我一直安慰自己播掷,他們只是感情好审编,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歧匈,像睡著了一般垒酬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上件炉,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天勘究,我揣著相機(jī)與錄音,去河邊找鬼斟冕。 笑死口糕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磕蛇。 我是一名探鬼主播景描,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秀撇!你這毒婦竟也來了超棺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤呵燕,失蹤者是張志新(化名)和其女友劉穎棠绘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氧苍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年夜矗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片让虐。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紊撕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澄干,到底是詐尸還是另有隱情,我是刑警寧澤柠傍,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布麸俘,位于F島的核電站,受9級(jí)特大地震影響惧笛,放射性物質(zhì)發(fā)生泄漏从媚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一患整、第九天 我趴在偏房一處隱蔽的房頂上張望拜效。 院中可真熱鬧,春花似錦各谚、人聲如沸紧憾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赴穗。三九已至,卻和暖如春膀息,著一層夾襖步出監(jiān)牢的瞬間般眉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工潜支, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甸赃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓冗酿,卻偏偏與公主長(zhǎng)得像埠对,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裁替,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理鸠窗,服務(wù)發(fā)現(xiàn),斷路器胯究,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 轉(zhuǎn)載自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce閱讀 2,267評(píng)論 1 5
  • cURL是一個(gè)利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具稍计,支持很多協(xié)議和選項(xiàng),如HTTP裕循、FTP臣嚣、TELNET等净刮,能...
    司馬東陽閱讀 1,440評(píng)論 0 6
  • 原文地址:PHPcURL庫(kù)函數(shù)抓取頁面內(nèi)容(轉(zhuǎn))作者:巴克 cURL是一個(gè)利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具...
    司馬東陽閱讀 1,179評(píng)論 0 3
  • 如果有一天我再回到這里 請(qǐng)不要讓我看見你悲傷的眼睛 如果有一天我再回到這里 請(qǐng)把沒說完的話都說給我聽 如果有一天我...
    不如須臾閱讀 228評(píng)論 0 3