你應該立刻放下curl,拿起httpie來高效幹活

2021-08-21 17:23:17 字數 3781 閱讀 3916

本文作者長期從事微服務開發,在實踐中,httpie給我提效不少。

如果你還在使用curl,那麼這篇文章就是給你的。

python有乙個給人類使用的requests庫,非常的簡單方便。httpie就是基於requests開發的,給人類用的命令列工具,取代curl的絕佳工具。

什麼叫「給人類用的」

經過長期的理解,我的總結如下:

給人類用的,需要滿足如下:

給機器用的,就是所有的行為,不管是常見還是不常見的,都需要具體命令告知它。

最開始的技術,都是給機器用的。在長期的實踐中,人類出現了很多常見行為或場景,將這些行為、場景變成預設值等方式,可以在大概率場景中,節省人類的工作量。

有時間建議讀完官方文件

''http

http aaa.***.com/api/v1/alert send_type=tts to:='["xn080***"]' content="this is alert"
可以看到,http版本比curl簡單了很多,主要原因如下:

具體為:

1. get和post是大概率行為,人類執行get時,一般不帶request data,帶request data的基本都是post行為。因此,httpie將這兩個常見大概率行為變成預設值。——如果http命令不帶request data,預設行為是get;如果帶了request data,預設行為是post從以上分析可以看出,httpie將大概率的人工操作進行了簡化設計,因此,人工操作可以節省很多時間。

安裝這麼好的東西趕緊安裝

pip install httpie
使用時,是用http ,不是httpie

再簡單一些

見下面這個常見指令,往乙個https**post乙個json資料,而且需要認證。

http  send_type=tts to:='["xn080***"]' content="this is alert -a username:password"
簡化https

在你的~/.bashrc等類似檔案加入:

alias https='http --default-scheme=https'
這樣,可以簡化為:

https aaa.***.com/api/v1/alert send_type=tts to:='["xn080***"]' content="this is alert -a username:password"
這樣的alias非常方便,http和https非常形象直觀

簡化認證並隱藏密碼資訊

session方法

第一次執行

-a username:password --session=your-session-name這樣,就會產生乙個session檔案,裡面包含了header,認證,cookie等資訊(預設在~/.httpie/sessions/your_url/your_sesssion_name裡)

以後執行,直接使用該session檔案即可,無需再加-a username:password

https aaa.***.com/api/v1/alert send_type=tts to:='["xn080***"]' content="this is alert" --session=your-session-name
.netrc方法(更簡單)

在~/.netrc中加入

machine url_you_want_to_visit

login your_username

password your_password

這樣,程式會自動帶上這個認證,語句簡化為:

https aaa.***.com/api/v1/alert send_type=tts to:='["xn080***"]' content="this is alert"
~/.netrc是一種通用方法,支援該檔案的其他網路操作都可以採用這種方法。

簡化json資料

我們會發現,在開發測試中,經常需要重複類似指令,能否把json資料也簡化輸入呢

簡化麻煩輸入的非字串部分

上面的語句最麻煩,且經常記錯的就是 to:=』[「xn080***」]』,單引號,雙引號不能搞錯,最外面是單引號,裡面的元素是雙引號,我用了n多次,一段時間沒用就又容易忘記。

簡化它

httpie支援檔案輸入

新增乙個例如to.json檔案,裡面內容

["xn080***"]
這樣,上面語句簡化為:

https aaa.***.com/api/v1/alert send_type=tts to:[email protected] content="this is alert"
@後面跟的就是檔案

全部資料來自檔案(最簡單)

採用重定向即可

新增檔案,例如send.json

上面語句簡化為:

https aaa.***.com/api/v1/alert < send.json"
是的,這已經極其精簡了!

httpie在指令碼中使用,需要注意幾點(易錯點):

http預設不理會返回的狀態碼,如果需要區分2xx,4xx等,需要加入 –check-status

https --check-status aaa.***.com/api/v1/alert < send.json"
這樣,當2xx返回時, echo $?得到是0;當4xx返回時,echo $? 得到的是4

in輸入管道的問題

這個坑被坑過,指令碼中,in輸入管道被重定向,會被輸入一些資料,產生不可預料的行為。

應該–ignore-stdin

例如:

https --check-status --ignore-stdin aaa.***.com/api/v1/alert < send.json"
pip install http-prompt 後

你可以體驗用全新的理念來操作httpie的方法

當使用環境變數時,無法正常使用,如:

export phone=1862030***x

https aaa.***.com/api/v1/alert send_type=tts to:='["$"]' content="this is alert"

解答

本質是單引號內的變數不會被正常解析,後端收到的to的value實際是$。

單引號內如果需要解析變數,多加一層單引號即可,如下:

$'"]' content="this is alert"實際上,如果shell有語法高亮,也會發現單引號裡面其實是不會翻譯變數的。

(提高:對於很多語言,也是遵循這個規則,單引號內的變數不翻譯,雙引號內才翻譯變數,例如groovy語言等)

放下這些,你會更優秀!

放下這些,你會更優秀!放下十樣東西,您會更優秀 面子 有時候我們低頭,是為了看準自己走的路,很多人認為,自己已經過得還可以,不願意去嘗試新鮮的事物,很多東西都放不下,拉不下這個臉,最終死在面子上。放下壓力 累與不累,取決於自己的心態。心靈的房間,不打掃就會落滿灰塵。掃地除塵,能夠使黯然的心變得亮堂 ...

高手,請放下你傲慢的架子!

大連 rootkit 18 12 33 大家是怎麼看待菜鳥和高手的?湘 m 坤 18 16 16 哪方面?大連 rootkit 18 16 48 看了 j exx上的 那些人 感覺自己很牛b 對於菜鳥不是笑話就是諷刺 廣州 華南風 18 17 50 我覺得 j exx裡的人就是 工作時間長了點,說話...

你應該知道git rebase

多人開發時,一般都會使用git來進行 管理。使用過git的童鞋肯定對git pullgit pushgit merge非常熟悉。那麼,大家有沒有了解過git rebase命令呢?rebase翻譯成中文叫 變基 相比merge,rebase並沒有進行合併操作,該命令只是提取了當前分支的修改,將其複製在...