把 cURL 玩出花樣,讓程序員效率升級

收藏待读
把 cURL 玩出花樣,讓程序員效率升級
把 cURL 玩出花樣,讓程序員效率升級

張小胖是一名 Android 程序員,吭哧吭哧寫了一下午代碼,終於把今天的開發任務完成了。

「嗯,就差最後一哆嗦了!」,看着自己寫的代碼就像看一件藝術品,手上不停,熟練的使用快捷鍵,Run App。

嗯?好像是接口返回的數據有問題,肯定是服務端寫出了 Bug,可別耽誤晚上和小亞的約會。心裏一邊回憶之前學習的「 說話藝術 」,同時保持微笑的對服務端小哥說。「誒,這個接口返回的數據好像有點問題,你能幫我看看是不是我傳的參數不對」。

「啊,遲點再看?那個…我晚上還有事兒,想早點回,你看能不能先幫我看看」

「把請求參數給你,你遲點再看?這不好弄吧,這麼多參數,又是 Header 又是 POST 請求的,一個一個複製很麻煩啊?」

「哦,用 curl 啊。」

張小胖表面平靜的打開 Google,輸入 「curl」 Enter…

什麼是 curl?

初識 curl

curl 是利用 URL 語法,在命令行方式下工作的開源傳輸工具。它支持文件的上傳和下載,是一款綜合傳輸工具。

curl 支持很多傳輸協議,包括比較常見的 HTTP、HTTPS、FTP、SMTP 等。

curl 作為命令行下使用的工具,它可以通過簡單的字符串的形式,來表達支持的這些協議的所有細節。

MacOS 和發行版的 Linux 系統中,都是內置了 curl的,對於 Windows,也是可以通過一些工具來在命令行中使用 curl,例如 winpty。

這裡舉幾個簡單的例子感受一下。

// 向 baidu.com 發起請求
curl "https://www.baidu.com"
// 將網頁保存到本地
curl "https://www.baidu.com" > a.html
// 下載一個圖片到本地
curl -O "https://ws2.sinaimg.cn/large/006tKfTcly1fpzmg0hppuj30rs0b474v.jpg"

這都是最簡單的 curl 的使用,例如我們可以通過 -H 增加 HTTP Header,通過 -x 為請求加一層代理,通過 -d 發送一個 POST 請求等等。

更多細節大家看通過 curl -help 命令看一下幫助文檔就清晰了。

curl 'https://www.baidu.com/' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Mobile Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9'  --compressed

上面是通過 Chrome DevTools 中,從百度首頁的請求中,複製出來的 curl,算是一個比較常見的 curl 格式了。

curl 能做什麼

curl 包含了所有傳輸協議的細節,例如 HTTP 協議,用 curl 就可以直接發起一個 HTTP 請求,並且完美的支持,讓協議中所有的細節一目了然。

那麼我們通常在什麼場景下會用到 curl 呢?這裡舉幾個例子。

1. 客戶端服務端調試解耦

在開頭的情況下,張小胖只需要通過抓包的方式,將有疑問的 HTTP 請求的 curl,發給服務端小哥,服務端小哥就可以在任何時候完美的模擬此次請求。

以此來做到,客戶端和服務端在調試上的解耦,有問題各自查各自的。

2. 簡單的爬蟲

對於一些公開的數據,沒有很複雜的邏輯結構。想要抓取數據,用 curl 就非常的合適,簡單的邏輯我們用 shell 腳本也可以解決。

畢竟我們的目的是爬一些數據,這種腳本可能用一次就作罷了,性能什麼的完全不考慮,首要考慮的因素就是快。

3. 增長黑客眼中的 curl

范冰在《增長黑客》一書中提到使用 curl 的例子,就非常的有意思。

某次冷啟動一款社交產品的時候,因為用戶數太少了,他們就準備爬取了一些別的產品中的用戶頭像,以此來模擬虛擬的用戶,那他們是怎麼做到的呢?

通過瀏覽器請求,確認頭像圖片的 URL 為類似 「http://aliimg.xxxapp.com/cache/photo/194402263_640_640.jpg」 這樣的地址,其中 640 就是圖片的尺寸,而 194402263 則是用戶的 ID。他們通過嘗試發現 194402263 是一個自增的數,也就是可以通過變換這個值,來獲取到不同用戶的頭像。

這下就簡單了,一行簡單的 curl 命令,就搞定了圖片的爬取工作。

curl -O http://aliimg.changba.com/cache/photo/[260929610-260939610]_640_640.jpg

這段 curl 命令,可以下載 260929610 ~ 260939610 範圍內的所有的用戶頭像。

把 cURL 玩出花樣,讓程序員效率升級

到本文發佈之時,此段 curl 腳本依然有效,有興趣的可以試試。

通過一對方括號,就可以解決圖片爬取的問題,是不是比我們寫腳本去爬,更簡單。

curl 從哪裡獲得

常用 curl 的人,當然可以徒手寫 curl,但是大多數時候,我們並不需要這樣做。

curl 發展到現在,好用到已經嵌入到我們開發中使用的各種工具里。例如:瀏覽器 Chrome 以及抓包工具 Charles。

1. Chrome DevTools

把 cURL 玩出花樣,讓程序員效率升級

2. Charles

把 cURL 玩出花樣,讓程序員效率升級

我們只需要在需要的時候,找到這個請求,將 curl 串複製出來就可以使用。

將 curl 轉換成代碼

光有 curl 命令,有時候還是沒法滿足我們的需求,身為開發,我們終歸是要寫代碼的。

所以有時候,我們需要根據 curl 命令,復刻出我們需要的代碼,這些,依然有工具來幫我們完成。

例如在 postman 中,我們就可以很方便的將請求轉換成我們需要的代碼,下面的示例中,就包含了 curl 導入,以及轉換成代碼的步驟。

把 cURL 玩出花樣,讓程序員效率升級

如果不想使用 postman,還有在線的工具可以選擇。

例如:https://curl.trillworks.com

把 cURL 玩出花樣,讓程序員效率升級

這個網站支持的語言,沒有 postman 豐富,不過一般主流的腳本語言,它都是支持的。

小結時刻

curl 使用起來非常的簡單,它本身就能完美的描述各種網絡協議,是我們必須掌握的一個工具。

具體你能將 curl 玩出什麼花來,就看你的想像力了。歡迎在留言區分享你使用 curl 的技巧。

本文對你有幫助嗎? 留言、好看、轉發 是最大的支持,謝謝!

「聯機圓桌」:point_left:推薦我的知識星球,一年 50 個優質問題,上桌聯機學習。

公眾號後台回復成長『 成長 』,將會得到我準備的學習資料,也能回復『 加群 』,一起學習進步;你還能回復『 提問 』,向我發起提問。

相關閱讀

免责声明:本文内容来源于mp.weixin.qq.com,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。