Curl命令詳解

本文轉(zhuǎn)載自curl 的用法指南-阮一峰

簡(jiǎn)介

??curl 是常用的命令行工具忘闻,用來(lái)請(qǐng)求 Web 服務(wù)器。它的名字就是客戶端(client)的 URL 工具的意思赊堪。

??它的功能非常強(qiáng)大髓废,命令行參數(shù)多達(dá)幾十種冬骚。如果熟練的話,完全可以取代 Postman 這一類的圖形界面工具。

image

??本文介紹它的主要命令行參數(shù)策严,作為日常的參考,方便查閱蝙寨。內(nèi)容主要翻譯自《curl cookbook》。為了節(jié)約篇幅嗤瞎,下面的例子不包括運(yùn)行時(shí)的輸出墙歪,初學(xué)者可以先看我以前寫的《curl 初學(xué)者教程》

不帶有任何參數(shù)時(shí)贝奇,curl 就是發(fā)出 GET 請(qǐng)求虹菲。

$ curl https://www.example.com

上面命令向www.example.com發(fā)出 GET 請(qǐng)求,服務(wù)器返回的內(nèi)容會(huì)在命令行輸出弃秆。

-A

-A參數(shù)指定客戶端的用戶代理標(biāo)頭届惋,即User-Agent。curl 的默認(rèn)用戶代理字符串是curl/[version]菠赚。

$ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com

上面命令將User-Agent改成 Chrome 瀏覽器。

$ curl -A '' https://google.com

上面命令會(huì)移除User-Agent標(biāo)頭郑藏。

也可以通過-H參數(shù)直接指定標(biāo)頭衡查,更改User-Agent

$ curl -H 'User-Agent: php/1.0' https://google.com

-b

-b參數(shù)用來(lái)向服務(wù)器發(fā)送 Cookie必盖。

$ curl -b 'foo=bar' https://google.com

上面命令會(huì)生成一個(gè)標(biāo)頭Cookie: foo=bar拌牲,向服務(wù)器發(fā)送一個(gè)名為foo俱饿、值為bar的 Cookie。

$ curl -b 'foo1=bar;foo2=bar2' https://google.com

上面命令發(fā)送兩個(gè) Cookie塌忽。

$ curl -b cookies.txt https://www.google.com

上面命令讀取本地文件cookies.txt拍埠,里面是服務(wù)器設(shè)置的 Cookie(參見-c參數(shù)),將其發(fā)送到服務(wù)器土居。

-c

-c參數(shù)將服務(wù)器設(shè)置的 Cookie 寫入一個(gè)文件枣购。

$ curl -c cookies.txt https://www.google.com

上面命令將服務(wù)器的 HTTP 回應(yīng)所設(shè)置 Cookie 寫入文本文件cookies.txt

-d

-d參數(shù)用于發(fā)送 POST 請(qǐng)求的數(shù)據(jù)體擦耀。

$ curl -d'login=emma&password=123'-X POST https://google.com/login
# 或者
$ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login

使用-d參數(shù)以后棉圈,HTTP 請(qǐng)求會(huì)自動(dòng)加上標(biāo)頭Content-Type : application/x-www-form-urlencoded。并且會(huì)自動(dòng)將請(qǐng)求轉(zhuǎn)為 POST 方法眷蜓,因此可以省略-X POST分瘾。

-d參數(shù)可以讀取本地文本文件的數(shù)據(jù),向服務(wù)器發(fā)送吁系。

$ curl -d '@data.txt' https://google.com/login

上面命令讀取data.txt文件的內(nèi)容德召,作為數(shù)據(jù)體向服務(wù)器發(fā)送。

--data-urlencode

--data-urlencode參數(shù)等同于-d汽纤,發(fā)送 POST 請(qǐng)求的數(shù)據(jù)體氏捞,區(qū)別在于會(huì)自動(dòng)將發(fā)送的數(shù)據(jù)進(jìn)行 URL 編碼。

$ curl --data-urlencode 'comment=hello world' https://google.com/login

上面代碼中冒版,發(fā)送的數(shù)據(jù)hello world之間有一個(gè)空格液茎,需要進(jìn)行 URL 編碼。

-e

-e參數(shù)用來(lái)設(shè)置 HTTP 的標(biāo)頭Referer辞嗡,表示請(qǐng)求的來(lái)源捆等。

curl -e 'https://google.com?q=example' https://www.example.com

上面命令將Referer標(biāo)頭設(shè)為https://google.com?q=example

-H參數(shù)可以通過直接添加標(biāo)頭Referer续室,達(dá)到同樣效果栋烤。

curl -H 'Referer: https://google.com?q=example' https://www.example.com

-F

-F參數(shù)用來(lái)向服務(wù)器上傳二進(jìn)制文件。

$ curl -F 'file=@photo.png' https://google.com/profile

上面命令會(huì)給 HTTP 請(qǐng)求加上標(biāo)頭Content-Type: multipart/form-data挺狰,然后將文件photo.png作為file字段上傳明郭。

-F參數(shù)可以指定 MIME 類型。

$ curl -F 'file=@photo.png;type=image/png' https://google.com/profile

上面命令指定 MIME 類型為image/png丰泊,否則 curl 會(huì)把 MIME 類型設(shè)為application/octet-stream薯定。

-F參數(shù)也可以指定文件名。

$ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile

上面命令中瞳购,原始文件名為photo.png话侄,但是服務(wù)器接收到的文件名為me.png

-G

-G參數(shù)用來(lái)構(gòu)造 URL 的查詢字符串。

$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

上面命令會(huì)發(fā)出一個(gè) GET 請(qǐng)求年堆,實(shí)際請(qǐng)求的 URL 為https://google.com/search?q=kitties&count=20吞杭。如果省略--G,會(huì)發(fā)出一個(gè) POST 請(qǐng)求变丧。

如果數(shù)據(jù)需要 URL 編碼芽狗,可以結(jié)合--data--urlencode參數(shù)。

$ curl -G --data-urlencode 'comment=hello world' https://www.example.com

-H

-H參數(shù)添加 HTTP 請(qǐng)求的標(biāo)頭痒蓬。

$ curl -H 'Accept-Language: en-US' https://google.com

上面命令添加 HTTP 標(biāo)頭Accept-Language: en-US童擎。

$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com

上面命令添加兩個(gè) HTTP 標(biāo)頭。

$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

上面命令添加 HTTP 請(qǐng)求的標(biāo)頭是Content-Type: application/json谊却,然后用-d參數(shù)發(fā)送 JSON 數(shù)據(jù)柔昼。

-i

-i參數(shù)打印出服務(wù)器回應(yīng)的 HTTP 標(biāo)頭。

$ curl -i https://www.example.com

上面命令收到服務(wù)器回應(yīng)后炎辨,先輸出服務(wù)器回應(yīng)的標(biāo)頭捕透,然后空一行,再輸出網(wǎng)頁(yè)的源碼碴萧。

-I

-I參數(shù)向服務(wù)器發(fā)出 HEAD 請(qǐng)求乙嘀,然會(huì)將服務(wù)器返回的 HTTP 標(biāo)頭打印出來(lái)。

$ curl -I https://www.example.com

上面命令輸出服務(wù)器對(duì) HEAD 請(qǐng)求的回應(yīng)破喻。

--head參數(shù)等同于-I虎谢。

$ curl --head https://www.example.com

-k

-k參數(shù)指定跳過 SSL 檢測(cè)。

$ curl -k https://www.example.com

上面命令不會(huì)檢查服務(wù)器的 SSL 證書是否正確曹质。

-L

-L參數(shù)會(huì)讓 HTTP 請(qǐng)求跟隨服務(wù)器的重定向婴噩。curl 默認(rèn)不跟隨重定向。

$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet

--limit-rate

--limit-rate用來(lái)限制 HTTP 請(qǐng)求和回應(yīng)的帶寬羽德,模擬慢網(wǎng)速的環(huán)境几莽。

$ curl --limit-rate 200k https://google.com

上面命令將帶寬限制在每秒 200K 字節(jié)。

-o

-o參數(shù)將服務(wù)器的回應(yīng)保存成文件宅静,等同于wget命令章蚣。

$ curl -o example.html https://www.example.com

上面命令將www.example.com保存成example.html

-O

-O參數(shù)將服務(wù)器回應(yīng)保存成文件姨夹,并將 URL 的最后部分當(dāng)作文件名纤垂。

$ curl -O https://www.example.com/foo/bar.html

上面命令將服務(wù)器回應(yīng)保存成文件,文件名為bar.html磷账。

-s

-s參數(shù)將不輸出錯(cuò)誤和進(jìn)度信息峭沦。

$ curl -s https://www.example.com

上面命令一旦發(fā)生錯(cuò)誤,不會(huì)顯示錯(cuò)誤信息够颠。不發(fā)生錯(cuò)誤的話熙侍,會(huì)正常顯示運(yùn)行結(jié)果。

如果想讓 curl 不產(chǎn)生任何輸出履磨,可以使用下面的命令蛉抓。

$ curl -s -o /dev/null https://google.com

-S

-S參數(shù)指定只輸出錯(cuò)誤信息,通常與-s一起使用剃诅。

$ curl -s -o /dev/null https://google.com

上面命令沒有任何輸出巷送,除非發(fā)生錯(cuò)誤。

-u

-u參數(shù)用來(lái)設(shè)置服務(wù)器認(rèn)證的用戶名和密碼矛辕。

$ curl -u 'bob:12345' https://google.com/login

上面命令設(shè)置用戶名為bob笑跛,密碼為12345,然后將其轉(zhuǎn)為 HTTP 標(biāo)頭Authorization: Basic Ym9iOjEyMzQ1聊品。

curl 能夠識(shí)別 URL 里面的用戶名和密碼飞蹂。

$ curl https://bob:12345@google.com/login

上面命令能夠識(shí)別 URL 里面的用戶名和密碼,將其轉(zhuǎn)為上個(gè)例子里面的 HTTP 標(biāo)頭翻屈。

$ curl -u 'bob' https://google.com/login

上面命令只設(shè)置了用戶名陈哑,執(zhí)行后,curl 會(huì)提示用戶輸入密碼伸眶。

-v

-v參數(shù)輸出通信的整個(gè)過程惊窖,用于調(diào)試。

$ curl -v https://www.example.com

--trace參數(shù)也可以用于調(diào)試厘贼,還會(huì)輸出原始的二進(jìn)制數(shù)據(jù)界酒。

$ curl --trace - https://www.example.com

-x

-x參數(shù)指定 HTTP 請(qǐng)求的代理。

$ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com

上面命令指定 HTTP 請(qǐng)求通過myproxy.com:8080的 socks5 代理發(fā)出嘴秸。

如果沒有指定代理協(xié)議毁欣,默認(rèn)為 HTTP。

$ curl -x james:cats@myproxy.com:8080 https://www.example.com

上面命令中岳掐,請(qǐng)求的代理使用 HTTP 協(xié)議凭疮。

-X

-X參數(shù)指定 HTTP 請(qǐng)求的方法。

$ curl -X POST https://www.example.com

上面命令對(duì)https://www.example.com發(fā)出 POST 請(qǐng)求岩四。

參考鏈接

(完)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哭尝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剖煌,更是在濱河造成了極大的恐慌材鹦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕姊,死亡現(xiàn)場(chǎng)離奇詭異桶唐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)茉兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門尤泽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事坯约⌒苎剩” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵闹丐,是天一觀的道長(zhǎng)横殴。 經(jīng)常有香客問我,道長(zhǎng)卿拴,這世上最難降的妖魔是什么衫仑? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮堕花,結(jié)果婚禮上文狱,老公的妹妹穿的比我還像新娘。我一直安慰自己缘挽,他們只是感情好瞄崇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著到踏,像睡著了一般杠袱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窝稿,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天楣富,我揣著相機(jī)與錄音,去河邊找鬼伴榔。 笑死纹蝴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的踪少。 我是一名探鬼主播塘安,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼援奢!你這毒婦竟也來(lái)了兼犯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤集漾,失蹤者是張志新(化名)和其女友劉穎切黔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體具篇,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纬霞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驱显。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诗芜。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞳抓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伏恐,到底是詐尸還是另有隱情孩哑,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布脐湾,位于F島的核電站臭笆,受9級(jí)特大地震影響叙淌,放射性物質(zhì)發(fā)生泄漏秤掌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一鹰霍、第九天 我趴在偏房一處隱蔽的房頂上張望闻鉴。 院中可真熱鬧,春花似錦茂洒、人聲如沸孟岛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)渠羞。三九已至,卻和暖如春智哀,著一層夾襖步出監(jiān)牢的瞬間次询,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工瓷叫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屯吊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓摹菠,卻偏偏與公主長(zhǎng)得像盒卸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子次氨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354