本文作者長期從事微服務開發,在實踐中,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並沒有進行合併操作,該命令只是提取了當前分支的修改,將其複製在...