快來看,敖丙還不會curl
不知道大家在平時有沒有用過curl,之前我是沒怎么用的,最近也開始用起來了。
curl應該還算是一個比較常見的東西吧?比如說,我們在學習Elasticsearch的時候去看官方文檔,就可以看到curl的蹤影,有的時候看別人的寫的文檔也會看到curl的蹤影。

這篇文章來簡單介紹一下curl以及它的用法,要是大家再遇上curl了,那就知道這是什么了。
介紹curl
什么是curl?
我們進入官網(wǎng),看到簡介是這樣的:
command line tool and library for transferring data with URLs
curl是在命令行下工作的,利用URL的語法進行數(shù)據(jù)的傳輸。
看起來有點抽象,我們可以簡單地理解為:我們會用curl去發(fā)出網(wǎng)絡請求,然后得到和提取數(shù)據(jù)。
為什么我們要用curl?以HTTP請求為例,如果要發(fā)出請求,我們常用的有POSTMAN、IDEA也集成HTTP Client等等
上面這些工具不香嗎?講真,還是挺香的。
那有了上面的工具,為什么我們還要用curl呢?
我們不是所有的環(huán)境都有POSTMAN和IDEA的,比如說我們的Centos系統(tǒng) 。此時我們又想要發(fā)出網(wǎng)絡請求,我們就可以通過curl去幫我們做。
curl不單單能支持http請求,它支持的協(xié)議有30+種,最常使用的有FILE、FTP、HTTP、HTTPS等。
總的來說:curl是一款很好用的網(wǎng)絡請求工具,在瀏覽文檔的時候都會有它的身影,如果你還不知道這個工具,建議可以了解一下。
我現(xiàn)在把系統(tǒng)常用的接口的請求給寫到一個文檔上,想要執(zhí)行哪個接口,檢索出來,在命令行執(zhí)行一下就好了,還是非常方便的。(我命令行窗口會一直常開,幾乎不用開POSTMAN了)

體驗curl
我們首先來體驗一下最簡單的curl 用法:
curl www.baidu.com我們可以看到返回baidu的HTML信息:

現(xiàn)在我們想看百度給我們返回的響應頭信息,于是我們可以這樣干:
curl -i www.baidu.com
響應頭的信息還不夠,我現(xiàn)在請求頭和響應頭都想看:
curl -v www.baidu.com
OK,現(xiàn)在我們熱身完了。我們平時可能會發(fā)個GET請求,然后把參數(shù)帶給接口的吧?在curl里怎么做呢?其實很簡單,跟瀏覽器的方式是一樣的,我們把參數(shù)拼在鏈接后面就可以了(這里注意帶單引號):
curl '127.0.0.1/send?receivers=3y&age=24'打到斷點可以看到,我們成功把參數(shù)給帶過去了:

發(fā)完GET,我們有的時候也會使用POST請求,怎么做呢?
curl -X POST --data "receivers=3y" '127.0.0.1/send'接口也是能拿到參數(shù)的,只不過我們發(fā)的是POST請求。

上面的命令好像復雜了一點,其實不然。-X POST表示發(fā)的是POST請求,而--date 后面跟著表示要帶什么參數(shù)過去。
我們在后面加個-v參數(shù)就知道上面是不是真的發(fā)了POST請求。
當我們執(zhí)行curl -X POST --data "receivers=三歪" '127.0.0.1/send' -v時,看到返回的信息會告訴我們(其實我們不需要使用-X POST在標明這是一個POST請求,curl已經(jīng)可以幫我們判斷了)

在發(fā)POST請求的時候,我們也有更加簡便的參數(shù)(-d來標明我們這是POST請求的數(shù)據(jù)體):
curl -d "receivers=三歪" '127.0.0.1/send'眾所周知HTTP支持好幾種動作,我們想發(fā)PUT請求,那就使用-X PUT就可以發(fā)出PUT請求了。(如果不指定,默認就是GET請求)
OK,現(xiàn)在我們已經(jīng)會發(fā)GET和POST請求了。現(xiàn)在我們的接口前后端交互一般用的是json格式,于是我們要發(fā)送一個POST請求并且告訴服務端我們的參數(shù)是json格式,怎么做?實際上就是加頭信息嘛~
curl -d '{"receivers":"3y"}' -H 'Content-Type: application/json' "127.0.0.1/sendWithJSON"我們可以看到,用-H 后面就可以增加頭信息

很多時候,我們在測接口的時候都需要登錄的,一般我們都要為其添加Cookie信息。在curl里邊也好辦,我們使用-b 后帶Cookie的信息就好了。
curl -d '{"receivers":"3y"}' -b 'aaaa' -H 'Content-Type: application/json' "127.0.0.1/sendWithJSON"上面就是基本在開發(fā)中常用的參數(shù)了,其實也不是很多吧。
curl是一個請求的工具,服務端返回的文件也是可以下載的。我們通過-o來下載百度返回的HTML

而-O參數(shù)將服務器回應保存成文件,并將 URL 的最后部分當作文件名。
再回過頭來看Elasticsearch給我們的命令,應該就能看得懂了:
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-darwin-x86_64.tar.gz小技巧:我們在Chrome瀏覽器調(diào)試的時候,可以把請求的信息復制為curl格式的。

三歪小故事

在前陣子我也開始用起了curl來請求接口,有一次由于域名要切換的原因,找到了運維大佬幫我弄一下。運維大佬說:“你加個Host 指定一下”。我當時只用curl 來發(fā)點請求什么的,加個頭信息這種肯定是忘了(不會);
只能雙手離開鍵盤,讓大佬操作了。
curl --help可以找到curl所有的參數(shù)。
彩蛋:
curl -O http://aliimg.changba.com/cache/photo/[260929610-260939610]_640_640.jpg參考資料:
- https://www.cnblogs.com/duhuo/p/5695256.html
- http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
各類知識點總結(jié)
下面的文章都有對應的原創(chuàng)精美PDF,在持續(xù)更新中,可以來找我催更~
- 92頁的Mybatis
- 129頁的多線程
- 141頁的Servlet
- 158頁的JSP
- 76頁的集合
- 64頁的JDBC
- 105頁的數(shù)據(jù)結(jié)構(gòu)和算法
- 142頁的Spring
- 58頁的過濾器和監(jiān)聽器
- 30頁的HTTP
- 42頁的SpringMVC
- Hibernate
- AJAX
- Redis
- ......
掃碼或者微信搜Java3y?免費領(lǐng)取原創(chuàng)思維導圖、精美PDF。在公眾號回復「888」領(lǐng)取,PDF內(nèi)容純手打有任何不懂歡迎來問我。
原創(chuàng)電子書
原創(chuàng)思維導圖

![]() |
|


