<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          還在用 postman?手把手教你用 curl 提高工作效率

          共 5677字,需瀏覽 12分鐘

           ·

          2022-01-22 04:49


          curl 是 Linux 系統(tǒng)上一款網(wǎng)絡(luò)工具,它的首字母 c 代表的是 client,表示它是客戶端程序。通過 URL 方式,可以實(shí)現(xiàn)客戶端與服務(wù)器之間傳遞數(shù)據(jù)。

          它的功能非常強(qiáng)大,支持大部分常見的網(wǎng)絡(luò)協(xié)議:HTTP、HTTPS、FTP。功能特性也很豐富,支持 http、https、cookie、認(rèn)證、代理、速率限制、斷點(diǎn)續(xù)傳,提供非常多的選項(xiàng),熟練運(yùn)用的話,基本可以取代 postman 這類圖形工具。

          與liburl關(guān)系

          其實(shí) curl 項(xiàng)目包括兩部分:curllibcurl,關(guān)系大概如圖所示

          • curl 是命令行工具,底層調(diào)用的是 libcurl 庫。
          • libcurl 是以形式存在,提供各種功能 C 接口,供其他程序調(diào)用,包括 curl 命令

          安裝使用

          和 wget 不同,并非所有的 Linux 發(fā)行版中都安裝了 curl,你可以使用包管理器自行安裝

          #?ubuntu?or?debian
          $?apt?install?curl
          #?centos?or?redhat
          $?yum?install?curl

          如果需要使用最新版本,或自定義安裝,可以通過源碼編譯方式進(jìn)行安裝

          $?wget?https://curl.se/download/curl-7.79.1.tar.gz
          $?./configure
          $?make
          $?make?install

          通過 curl --version 可以驗(yàn)證命令是否安裝準(zhǔn)確

          上手操作

          我們先來看下 curl 最簡(jiǎn)單的使用方式,沒有任何選項(xiàng),將服務(wù)器響應(yīng)的內(nèi)容輸出到屏幕上

          $?curl?http://linuxblogs.cn

          有時(shí)我們不想顯示錯(cuò)誤和進(jìn)度信息,可以使用 -s 選項(xiàng)開啟靜默模式

          $?curl?-s?http://linuxblogs.cn
          #?完全不輸出任何內(nèi)容,可以通過"echo?$?"來判斷命令成功或失敗
          $?curl?-s?-o?/dev/null?http://linuxblogs.cn

          通過 -v 選項(xiàng)可以非常詳細(xì)地顯示 curl 的整個(gè)工作過程,相當(dāng)于打開了調(diào)試模式

          請(qǐng)求http

          接著介紹我們平時(shí)最常用的,和 http 數(shù)據(jù)傳輸相關(guān)的操作

          1. 發(fā)送 GET 請(qǐng)求

          curl 命令默認(rèn)發(fā)送的是 GET 請(qǐng)求,響應(yīng)內(nèi)容直接打印在了屏幕上

          $?curl?http://www.baidu.com

          使用 -i 選項(xiàng),可以打印服務(wù)器響應(yīng)的 HTTP 頭部信息

          #?先打印請(qǐng)求頭,空一行,再打印網(wǎng)頁內(nèi)容
          $?curl?-i?http://www.baidu.com

          如果只想測(cè)試該鏈接或資源是否正常,使用 -I 選項(xiàng),可以只打印響應(yīng)頭信息,注意此時(shí)發(fā)送的是 HEAD 請(qǐng)求

          2. 發(fā)送 POST 請(qǐng)求

          默認(rèn)情況下,curl 發(fā)送的是 GET 請(qǐng)求,使用 -X 參數(shù)可以指定發(fā)送 POST 請(qǐng)求,使用 -d 參數(shù)可以指定請(qǐng)求數(shù)據(jù)

          #?無數(shù)據(jù)的?POST?請(qǐng)求
          $?curl?-x?POST?http://www.domain.com
          #?發(fā)送?Form?數(shù)據(jù)
          $?curl?-d?'user=foo&pass=123'?-X?POST?http://google.com/login?
          #?等價(jià)于上邊命令
          $?curl?-d?'user=foo'?-d?'pass=123'?http://google.com/login

          使用 -d 選項(xiàng)后,默認(rèn)就是 POST 請(qǐng)求,可以省略 -X 選項(xiàng),另外,使用多個(gè) -d 選項(xiàng),可以使命令行顯得更清晰

          下邊命令可以讀取本地文件,作為數(shù)據(jù)向服務(wù)器發(fā)送

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

          3. 發(fā)送 Json 格式數(shù)據(jù)請(qǐng)求

          curl 可以發(fā)送 json 格式的請(qǐng)求,需要設(shè)置 Content-Type 為 application/json

          $?curl?-d?'{"user":"foo","pass":"123"}'?\
          ??????-H?'Content-Type:?application/json'?\
          ??????http://google.com/login

          -H 選項(xiàng)指定 Content-Type 請(qǐng)求頭為 json 格式,這樣 web 服務(wù)器就清楚數(shù)據(jù)類型,知道該怎么處理了

          4. 構(gòu)造查詢字符串參數(shù)

          通過 -G 選項(xiàng),可以構(gòu)造查詢字符串參數(shù)

          curl?-G?-d?'q=chopin'?-d?'count=20'?http://google.com/search
          #?等價(jià)于下邊命令
          curl?'http://google.com/search?q=chopin&count=20'

          上述命令會(huì)發(fā)送 GET 請(qǐng)求,如果忽略 -G 選項(xiàng),會(huì)發(fā)出一個(gè) POST 請(qǐng)求

          5. 添加請(qǐng)求頭

          通過 -H 選項(xiàng),可以為請(qǐng)求添加標(biāo)頭

          $?curl?-H?'Accept-Language:?en-US'?http://google.com
          #?可以指定多個(gè)-H選項(xiàng)
          $?curl?-H?'Accept-Language:?en-US'?-H?'Secret-Message:?xyzzy'?http://google.com

          6. 設(shè)置重定向

          默認(rèn) curl 不會(huì)跟隨重定向,指定 -L 選項(xiàng)會(huì)讓請(qǐng)求跟隨服務(wù)器重定向

          $?curl?-L?http://api.twitter.com/hello

          7. 設(shè)置靜默輸出

          指定 -s 選項(xiàng)將不輸出錯(cuò)誤和進(jìn)度信息,如果想讓 curl 不產(chǎn)生任何輸出,使用下面的命令

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

          8. 詳細(xì)的調(diào)試信息

          指定 -v 選項(xiàng),會(huì)輸出通信的整個(gè)過程,一般用于調(diào)試

          $?curl?-v?http://www.baidu.com

          --trace 選項(xiàng)也可以用來調(diào)試,還可以輸出更詳細(xì)的內(nèi)容,比如原始的二進(jìn)制數(shù)據(jù)

          $?curl?--trace?-?http://www.baidu.com

          9. 模擬瀏覽器訪問

          -A 選項(xiàng)可以指定客戶端的用戶代理信息,即設(shè)置 UserAgent 請(qǐng)求頭。

          $?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'?http://google.com

          上面命令將 UserAgent 設(shè)置成了 Chrome 瀏覽器的標(biāo)識(shí)。其實(shí)也可以直接通過 -H 選項(xiàng)來指定

          $?curl?-H?"User-Agent:?go/1.15"?http://google.com

          10. 偽造 refer 解決防盜鏈

          有時(shí)候,引用或下載某網(wǎng)站圖片等資源時(shí),會(huì)有防盜鏈的限制,可以通過設(shè)置 refer 請(qǐng)求頭為站內(nèi)域名來解決

          #?-e?參數(shù)來設(shè)置?HTTP?請(qǐng)求頭?Referer
          $?curl?-e?'http://linuxblogs.cn'?http://linuxblogs.cn/girl.jpg
          #?-H?參數(shù)也可以直接設(shè)置請(qǐng)求頭?Referer
          $?curl?-H?"Referer:?http://linuxblogs.cn"?http://linuxblogs.cn/girl.jpg

          11. 設(shè)置 Cookie

          -b 選項(xiàng)用來向服務(wù)器發(fā)送 Cookie,該命令會(huì)生成一個(gè)請(qǐng)求頭 Cookie: foo=bar,向服務(wù)器發(fā)送一個(gè) Cookie

          $?curl?-b?'foo=bar'?http://google.com
          #?發(fā)送兩個(gè)cookie
          $?curl?-b?'foo=bar;name=mike'?http://google.com

          也可以通過讀取本地 cookie 文件,將其發(fā)送給服務(wù)器。-c 選項(xiàng)可以將服務(wù)器響應(yīng)的 Cookie 寫入一個(gè)文件

          $?curl?-b?cookie.txt?http://google.com
          #?將cookie寫入文件
          $?curl?-c?cookie.txt?http://baidu.com

          文件操作

          1. 下載文件資源

          使用 -o-O 選項(xiàng),可以將網(wǎng)絡(luò)資源保存到文件中

          #?等效于?wget
          $?curl?-o?chopin.html?http://linuxblogs.cn
          #?-O?選項(xiàng),可以將?URL?的最后部分當(dāng)做文件名
          $?curl?-O?http://linuxblogs.cn/bar.html

          如果想顯示下載進(jìn)度條,可以使用 -# 選項(xiàng)

          2. 循環(huán)下載文件

          有時(shí)候要下載的多個(gè)文件,只有名稱后綴不同,可以這樣來下載

          $?curl?-O?http://linuxblogs.cn/dog[1-5].jpg

          3. 壓縮下載

          使用 --compressed 選項(xiàng),允許你要求 HTTP 和 HTTPS 服務(wù)器提供數(shù)據(jù)的壓縮版本,這在帶寬有限的情況下,可以幫你節(jié)約不少時(shí)間

          curl?--compressed?http://linuxblogs.cn/foo.txt

          4. 限制下載速度

          如果帶寬不是很充足,多人共享帶寬,curl 支持限速功能

          $?curl?http://linuxblogs.cn?--limit-rate?200K

          另外一個(gè)用法,就是模擬測(cè)試慢網(wǎng)速的場(chǎng)景,用于做開發(fā)測(cè)試

          5. 分塊下載

          有時(shí)文件會(huì)很大,我們采用可以分段的方式進(jìn)行下載,最后合并為完成的文件

          $?curl?-r?0-100?-o?part1.mp4?http://linuxblogs.cn/cang.mp4
          $?curl?-r?100-200?-o?part2.mp4?http://linuxblogs.cn/cang.mp4
          $?curl?-r?200-?-o?part3.mp4?http://linuxblogs.cn/cang.mp4
          $?cat?part*.mp4?>?cang.mp4

          6. 斷點(diǎn)續(xù)傳

          有時(shí)候網(wǎng)絡(luò)不太好,通過 curl 下載大文件時(shí),可能發(fā)生中斷的現(xiàn)象。使用 -C 選項(xiàng)可以實(shí)現(xiàn)斷點(diǎn)續(xù)傳,非常實(shí)用

          $?curl?-C?-O?http://linuxblogs.cn/girl.mp4

          在弱網(wǎng)環(huán)境下,加上 --retry N 選項(xiàng),可以在失敗的時(shí)候多次重試,對(duì)下載操作更友好一些。

          7. 通過 FTP 下載文件

          支持下載 FTP 文件,curl 提供兩種下載的語法

          $?curl?-O?-u?user:pass?ftp://linuxblogs.cn/dog.jpg
          $?curl?-O?ftp://user:[email protected]/dog.jpg

          8. 上傳文件

          平時(shí)開發(fā)時(shí),可以通過 curl 實(shí)現(xiàn)文件的上傳功能,非常高效。

          #?命令會(huì)給?HTTP?加上請(qǐng)求頭?Content-Type:?multipart/form-datas
          $?curl?-F?'file=@蒼老師.mp4'?http://linuxblogs.cn/upload

          -F 選項(xiàng)還可以指定 MIME 類型和文件名

          $?curl?-F?'file=@蒼老師.mp4;type=image/png'?http://linuxblogs.cn/upload
          #?還可以支持修改文件名,而不是默認(rèn)的
          $?curl?-F?'file=@蒼老師.mp4;file=天空.mp4'?http://linuxblogs.cn/upload

          https相關(guān)

          目前大多數(shù)站點(diǎn)采用的都是 https,這里給出幾個(gè)常見的用法

          1. 忽略證書驗(yàn)證

          有時(shí)訪問 https 站點(diǎn)時(shí),服務(wù)器證書過期或是自簽證書,使用 curl 訪問時(shí)會(huì)報(bào)錯(cuò),可以指定 -k 選項(xiàng)來忽略證書有效性驗(yàn)證。

          $?curl?-k?https://linuxblogs.cn

          2. 指定客戶端證書

          有時(shí)需要雙向驗(yàn)證,服務(wù)器也要驗(yàn)證客戶端,用來確定客戶端的真實(shí)身份??梢允褂?--cert--key 指定客戶端證書

          $?curl?--cert?client.pem?--key?key.pem?https://linuxblogs.cn

          3. 使用證書鏈驗(yàn)證服務(wù)器證書

          在平時(shí)開發(fā)時(shí),證書一般是自簽的,可以通過指定 CA 證書鏈進(jìn)行證書的驗(yàn)證

          $?curl?--cacert?caChain.pem?https://linuxblogs.cn

          高級(jí)功能

          (一)設(shè)置代理

          1. 命令行

          通過命令行,可以很簡(jiǎn)單的實(shí)現(xiàn) curl 代理功能

          $?curl?-x?"http://user:[email protected]:1234"?"http://linuxblogs.cn"

          2. 使用環(huán)境變量

          通過設(shè)置環(huán)境的方式也很簡(jiǎn)單

          $?export?http_proxy="http://user:[email protected]:1234"

          3. 使用配置文件

          使用配置文件 ~/.curlrc,修改內(nèi)容如下:

          proxy="http://user:[email protected]:1234"

          (二)格式化

          在平時(shí)使用 curl 時(shí),可能希望能夠獲取更多信息,如請(qǐng)求耗時(shí)、訪問時(shí)延、請(qǐng)求大小等信息。比如在生產(chǎn)環(huán)境要測(cè)試某個(gè)接口,可以通過如下的方式,獲取你想要的數(shù)據(jù),非常方便。

          #?只獲取http狀態(tài)碼
          $?curl?-s?-w?'%{http_code}'?https://baidu.com?-o?/dev/null

          不過癮?直接上大招,首先需要準(zhǔn)備格式模板

          有了上邊的格式模板,我們就可以輕松獲取非常漂亮的統(tǒng)計(jì)數(shù)據(jù)

          我們可以很清晰地看到,域名解析、連接建立時(shí)間、下載速度、狀態(tài)碼等數(shù)據(jù)。當(dāng)然 curl 支持的關(guān)鍵字段還有很多,更多的字段可以參考 man 手冊(cè)。

          ----- End?-----

          原創(chuàng)不易,跪求大家?guī)兔o點(diǎn)個(gè)贊、在看,感謝!

          瀏覽 31
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线天堂а√8 | 激情久久成人午夜视频 | 豆花AV网站在线观看 | 免费无码一区 | 好吊一区二区 |