curl 用法簡(jiǎn)介

[TOC]

curl 思維導(dǎo)圖

簡(jiǎn)介

curl is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction.

curl 是一個(gè)命令行客戶端,支持多種傳輸協(xié)議聊记,最經(jīng)常使用的場(chǎng)景就是在終端請(qǐng)求服務(wù)器資源震桶。

curl 命令非常強(qiáng)大逆屡,熟練掌握情況下很魂,相當(dāng)于一個(gè)微型終端瀏覽器柔袁。

基本使用

  • 請(qǐng)求資源curl 直接使用的效果就是發(fā)送Get請(qǐng)求服務(wù)器資源:

    $ curl 'http://httpbin.org/get'
    
  • 指定請(qǐng)求方法:使用選項(xiàng)-X, --request <command>

    $ curl -X GET 'http://httpbin.org/get'  # 默認(rèn)即使用 GET 請(qǐng)求鞠绰,故可忽略 -X GET
    $ curl -X POST 'http://httpbin.org/post' # 發(fā)送 POST 請(qǐng)求
    

    該選項(xiàng)的參數(shù)有:GET厢洞、POST绳锅、HEAD西饵、PUTDELETE鳞芙、FTP眷柔、POP3IMAP原朝、SMTP...

    :一般情況下驯嘱,-X/--request選項(xiàng)都無(wú)需攜帶,因?yàn)楹芏嗥渌x項(xiàng)都默認(rèn)帶有請(qǐng)求方法的語(yǔ)義喳坠。雖如此鞠评,但還是推薦請(qǐng)求時(shí)攜帶該選項(xiàng)。

  • 發(fā)送請(qǐng)求頭:使用選項(xiàng)-H, --header <header/@file>

    # 發(fā)送請(qǐng)求頭:accept: application/json
    $ curl -X GET 'http://httpbin.org/headers' -H 'accept: application/json'
    
    # 發(fā)送 JSON 數(shù)據(jù)
    $ curl -X POST -d '{"login": "emma","password": 123}' -H 'Content-Type: application/json' 'http://httpbin.org/post'
    
  • 重定向:使用選項(xiàng)-L, --location:

    # curl 默認(rèn)不會(huì)自動(dòng)重定向
    $ curl -X GET "http://httpbin.org/absolute-redirect/1" -H "accept: text/html"
    
    # 使用 -L 選項(xiàng)使能重定向
    $ curl -X GET "http://httpbin.org/absolute-redirect/1" -H "accept: text/html" -L
    
  • 使用 cookie:使用選項(xiàng)-b, --cookie <data|filename>丙笋、-c, --cookie-jar <filename>

    # 請(qǐng)求頭攜帶:Cookie: key1=value1;key2=value2 
    $ curl 'http://httpbin.org/cookies' -b 'key1=value1;key2=value2'
    
    # 保存 Cookie: name=whyn 到文件 cookies.txt
    $ curl 'http://httpbin.org/cookies/set/name/whyn' -c cookies.txt
    
    # 從文件中讀取 Cookie 信息
    $ curl 'http://httpbin.org/cookies' -b cookies.txt
    
  • 指定 Referer:使用選項(xiàng)-e, --referer <URL>

    # 請(qǐng)求頭添加:Referer: http://www.baidu.com
    $ curl 'http://httpbin.org/get' -e 'http://www.baidu.com'
    
    # 當(dāng)然同樣可以直接指定請(qǐng)求頭:Referer
    $ curl 'http://httpbin.org/get' -H 'Referer: http://www.baidu.com'
    
    # 重定向時(shí)谢澈,加上 ;auto,則會(huì)自動(dòng)將第二次請(qǐng)求的 Referer 設(shè)置為重定向頁(yè)面御板,即:
    # 首次請(qǐng)求:Referer: http://www.baidu.com
    # 第二次請(qǐng)求(重定向):Referer: http://httpbin.org/redirect/1
    $ curl -L 'http://httpbin.org/redirect/1' -e 'http://www.baidu.com;auto'
    
  • 指定 User-Agent:使用選項(xiàng)-A, --user-agent <name>

    # 添加請(qǐng)求頭:User-Agent: xxxx
    $ curl 'http://httpbin.org/get' -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    
    # 當(dāng)然同樣可以直接指定請(qǐng)求頭:User-Agent
    $ curl 'http://httpbin.org/get' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    
  • 忽略 SSL 檢測(cè):使用選項(xiàng)-k, --insecure

    # 跳過(guò) www.baidu.com 的證書(shū)驗(yàn)證
    $ curl -k 'https://www.baidu.com'
    
  • 保存為文件:使用選項(xiàng)-O, --remote-name锥忿、-o, --output <file>

    # 保存網(wǎng)頁(yè),自動(dòng)命名為 index.html
    $ curl -O 'http://www.baidu.com/index.html' 
    
    # 保存網(wǎng)頁(yè)怠肋,手動(dòng)命名為 baidu.html
    $ curl -o 'baidu.html' 'http://www.baidu.com/index.html' 
    
    # 下載圖片
    $ curl -X GET 'https://upload-images.jianshu.io/upload_images/2222997-88ad51461e1e15ba.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp' -o nginx.webp
    
    # 自動(dòng)斷點(diǎn)續(xù)傳敬鬓,注: -C - 后面帶一個(gè) -,表示自動(dòng)續(xù)傳,否則需要手動(dòng)指定斷點(diǎn)續(xù)傳字節(jié)位置
    $ curl -X GET -C - 'https://upload-images.jianshu.io/upload_images/2222997-88ad51461e1e15ba.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp' -o nginx.webp
    url 
    

    -O/-o選項(xiàng)將 curl 結(jié)果重定向到文件钉答,相當(dāng)于下載資源础芍,其效果等同于wget

  • 查看完整請(qǐng)求信息:使用選項(xiàng)-v, --verbose

    $ curl 'http:/httpbin.org/get' -v
    

    -v/--verbose選項(xiàng)會(huì)顯示完整的請(qǐng)求通訊過(guò)程数尿,其顯示內(nèi)容包含如下幾方面:

    • *開(kāi)頭的行:表示 curl 提供的額外信息
    • >開(kāi)頭的行:表示 請(qǐng)求頭 內(nèi)容
    • <開(kāi)頭的行:表示響應(yīng)頭內(nèi)容

其它選項(xiàng)

  • 查看響應(yīng)頭:使用選項(xiàng)-I, --head

    # 相當(dāng)于 head 請(qǐng)求
    $ curl 'http://httpbin.org/get' -I
    
  • 查看響應(yīng)頭及響應(yīng)體:使用選項(xiàng)-i, --include

    $ curl 'http://httpbin.org/get' -i
    
  • 發(fā)送表單數(shù)據(jù):對(duì)應(yīng)選項(xiàng)有如下幾個(gè):

    • -d, --data <data>:以ContentType:application/x-www-form-urlencoded的格式發(fā)送表單數(shù)據(jù)仑性,即key1=value1&key2=value2形式:
    # -d 默認(rèn)攜帶 POST 請(qǐng)求語(yǔ)義,故 -X POST 在此可省略
    $ curl -X POST -d 'login=emma&password=123' 'http://httpbin.org/post'
    
    # 可多次使用 -d右蹦,數(shù)據(jù)會(huì)自動(dòng)合并诊杆,相當(dāng)于`login=emma&password=123`
    $ curl -X POST -d 'login=emma' -d 'password=123' 'http://httpbin.org/post'
    
    $ curl -X POST -d "login=@name.txt" -d "password=-"
    

    :對(duì)于GET請(qǐng)求的參數(shù),有如下兩種格式:

    # 直接拼接到 URL 后面作為參數(shù)傳遞
    $ curl 'http://httpbin.org/anything?name=whyn'
    
    # 使用 -d 選項(xiàng)時(shí)何陆,需加上 -G 選項(xiàng)將請(qǐng)求方式設(shè)置為 GET 
    # curl 'http://httpbin.org/anything' -G -d 'name=whyn'
    
    • --data-urlencode <data>:如果表單數(shù)據(jù)需要進(jìn)行 URL 編碼晨汹,則使用該選項(xiàng):
    $ curl -X POST --data-urlencode 'name=emma wild' 'http://httpbin.org/post'
    
    • -F, --form <name=content>:以ContentType: multipart/form-data的格式發(fā)送表單數(shù)據(jù),一般用于上傳文件:
    # 以文件表單進(jìn)行上傳:發(fā)送文件 portrait.png贷盲,對(duì)應(yīng)表單字段為 profile( @ 用于指定上傳文件)
    $ curl -F profile=@portrait.jpg https://example.com/upload.cgi
    
    # 以文本表單進(jìn)行上傳:先讀取 hugefile.txt 內(nèi)容淘这,然后作為字段 story 進(jìn)行上傳( < 表示讀取文件內(nèi)容)
    $ curl -F "story=<hugefile.txt" https://example.com/
    
    # 從標(biāo)準(zhǔn)輸入流中讀取內(nèi)容進(jìn)行上傳(- 表示讀取標(biāo)準(zhǔn)輸入流,此時(shí)使用 @ 或 < 均可以)
    $ echo 'Whyn' | curl -X POST -F "name=@-" 'http://httpbin.org/post'
    
    # 發(fā)送表單字段 name 和文件 profile巩剖,多字段铝穷,會(huì)產(chǎn)生格式: boundary=------------------------d74496d66958873e
    $ curl -F name=yourname -F profile=@portrait.jpg https://example.com/upload.cgi
    
    # 使用 type 指定上傳文件 MIME 類型,默認(rèn)使用的 MIME 為:application/octet-stream
    $ curl -F "web=@index.html;type=text/html" example.com
    
    # 使用 filename 修改上傳文件名球及,本地使用文件 portrait.jpg氧骤,服務(wù)器接受到的為 me.jgp
    $ curl -F 'profile=@portrait.jpg;filename=me.jpg' https://example.com/upload.cgi
    
  • 代理:使用選項(xiàng)-x, --proxy [protocol://]host[:port]

    # 使用 HTTP 代理(本地使用 Nginx 搭建一個(gè)正向代理,通過(guò) -I 選項(xiàng)可以看到響應(yīng)頭`Server: nginx/1.18.0`吃引,結(jié)果由 Nginx 返回筹陵,則表示代理成功)
    $ curl -x 'http://localhost:80' 'http://httpbin.org/get' -I
    
    # 使用 socks5 代理
    $ curl -x "socks5://localhost:10808" "https://www.google.com" 
    

    -x, --proxy選項(xiàng)默認(rèn)使用 HTTP 協(xié)議,默認(rèn)使用端口 1080镊尺。

  • 限速:使用選項(xiàng):--limit-rate <speed>

    # 帶寬限制為 200k
    $ curl --limit-rate 200k http://www.badiu.com
    
  • 保存詳細(xì)的通訊流程:使用選項(xiàng)--trace <file>朦佩,--trace-ascii <file>

    # 16 進(jìn)制 dump 文件:顯示完整通訊過(guò)程
    $ curl 'http://httpbin.org/get' --trace trace.txt
    
    # ascii 碼 dump 文件,更加易讀
    $ curl 'http://httpbin.org/get' --trace-ascii trace-ascii.txt
    
  • 認(rèn)證:使用選項(xiàng):-u, --user <user:password>

    # basic authentication
    $ curl -X GET 'https://httpbin.org/basic-auth/admin/this.is.the.password' -u 'admin:this.is.the.password' --header 'accept: application/json; charset=utf-8'
    

更多其他選項(xiàng)內(nèi)容庐氮,請(qǐng)查看:curl --help语稠、man curlcurl-manpage

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弄砍,一起剝皮案震驚了整個(gè)濱河市仙畦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌音婶,老刑警劉巖慨畸,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衣式,居然都是意外死亡寸士,警方通過(guò)查閱死者的電腦和手機(jī)檐什,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)弱卡,“玉大人乃正,你說(shuō)我怎么就攤上這事∩舨” “怎么了瓮具?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凡蜻。 經(jīng)常有香客問(wèn)我搭综,道長(zhǎng),這世上最難降的妖魔是什么划栓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮条获,結(jié)果婚禮上忠荞,老公的妹妹穿的比我還像新娘。我一直安慰自己帅掘,他們只是感情好委煤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著修档,像睡著了一般碧绞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吱窝,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天讥邻,我揣著相機(jī)與錄音,去河邊找鬼院峡。 笑死兴使,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的照激。 我是一名探鬼主播发魄,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼俩垃!你這毒婦竟也來(lái)了励幼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤口柳,失蹤者是張志新(化名)和其女友劉穎苹粟,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啄清,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡六水,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年俺孙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掷贾。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡睛榄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出想帅,到底是詐尸還是另有隱情场靴,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布港准,位于F島的核電站旨剥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浅缸。R本人自食惡果不足惜轨帜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衩椒。 院中可真熱鬧蚌父,春花似錦、人聲如沸毛萌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阁将。三九已至膏秫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間做盅,已是汗流浹背缤削。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留言蛇,地道東北人僻他。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腊尚,于是被迫代替她去往敵國(guó)和親吨拗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348