你應該立刻放下curl,拿起httpie來高效幹活
背景
本文作者長期從事微服務開發,在實踐中,httpie給我提效不少。
如果你還在使用curl,那麼這篇文章就是給你的。
python有一個給人類使用的requests庫,非常的簡單方便。httpie就是基於requests開發的,給人類用的命令列工具,取代curl的絕佳工具。
什麼叫“給人類用的”
經過長期的理解,我的總結如下:
給人類用的,需要滿足如下:
- 將常見場景、大概率行為變成了預設值
- 只需人類輸入最核心的業務資訊,多餘的語法格式由程式自己分析判斷
給機器用的,就是所有的行為,不管是常見還是不常見的,都需要具體命令告知它。
最開始的技術,都是給機器用的。在長期的實踐中,人類出現了很多常見行為或場景,將這些行為、場景變成預設值等方式,可以在大概率場景中,節省人類的工作量。
參考資料
httpie應用精華
httpie VS curl
curl
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ \
"send_type": "wechat", \
"to": [ \
"xn080xxx", \
], \
"content": "this is xxx alert" \
}' 'http://aaa.xxx.com/api/v1/alert'
http
http aaa.xxx.com/api/v1/alert send_type =tts to:='["xn080xxx"]' content="this is alert"
可以看到,http版本比curl簡單了很多,主要原因如下:
- 將常見場景、大概率行為變成了預設值
- 只需人類輸入最核心的業務資訊,多餘的語法格式由程式自己分析判斷
具體為:
1. get和post是大概率行為,人類執行get時,一般不帶request data,帶request data的基本都是post行為。因此,httpie將這兩個常見大概率行為變成預設值。—— 如果http命令不帶request data,預設行為是get;如果帶了request data,預設行為是post
2. 採用json互動基本是當今人類的最常見的場景,因此,header的兩個地方預設設定為application/json,可以在大概率場景中節省人工輸入
3. json互動作為大概率事件,簡化json資料輸入可以節省很多人工。curl採用json的raw的格式輸入,不是很高效。httpie用=代表request data,:代表header data,==代表query data,自動識別,無需呆板的完整定義各個資料體,將多餘的人工操作儘可能自動化
4. 字串輸入是大概率行為,因此字串的賦值,無需雙引號,除非裡面有空格等特殊字元。將其他較小概率的資料型別採用:=進行輸入(raw格式,如整形數,陣列)
5. 不加http://也是可以的,這是預設行為
從以上分析可以看出,httpie將大概率的人工操作進行了簡化設計,因此,人工操作可以節省很多時間。
安裝
這麼好的東西趕緊安裝
pip install httpie
使用時,是用http ,不是httpie
再簡單一些
見下面這個常見指令,往一個https網站post一個json資料,而且需要認證。
http https://aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert -a username:password"
簡化https
在你的~/.bashrc等類似檔案加入:
alias https='http --default-scheme=https'
這樣,可以簡化為:
https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert -a username:password"
這樣的alias非常方便,http和https非常形象直觀
簡化認證並隱藏密碼資訊
session方法
第一次執行
https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert" -a username:password --session=your-session-name
這樣,就會產生一個session檔案,裡面包含了header,認證,cookie等資訊(預設在~/.httpie/sessions/your_url/your_sesssion_name裡)
以後執行,直接使用該session檔案即可,無需再加-a username:password
https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert" --session=your-session-name
.netrc方法(更簡單)
在~/.netrc中加入
machine url_you_want_to_visit
login your_username
password your_password
這樣,程式會自動帶上這個認證,語句簡化為:
https aaa.xxx.com/api/v1/alert send_type=tts to:='["xn080xxx"]' content="this is alert"
~/.netrc是一種通用方法,支援該檔案的其他網路操作都可以採用這種方法。
簡化json資料
我們會發現,在開發測試中,經常需要重複類似指令,能否把json資料也簡化輸入呢
簡化麻煩輸入的非字串部分
上面的語句最麻煩,且經常記錯的就是 to:=’[“xn080xxx”]’,單引號,雙引號不能搞錯,最外面是單引號,裡面的元素是雙引號,我用了N多次,一段時間沒用就又容易忘記。
簡化它
httpie支援檔案輸入
新增一個例如to.json檔案,裡面內容
["xn080xxx"]
這樣,上面語句簡化為:
https aaa.xxx.com/api/v1/alert send_type=tts to:[email protected] content="this is alert"
@後面跟的就是檔案
全部資料來自檔案(最簡單)
採用重定向即可
新增檔案,例如send.json
{
"send_type": "tts",
"to": ["xn080xxx"],
"content": "this is alert"
}
上面語句簡化為:
https aaa.xxx.com/api/v1/alert < send.json"
是的,這已經極其精簡了!
httpie在指令碼中應用的注意事項
httpie在指令碼中使用,需要注意幾點(易錯點):
http預設不理會返回的狀態碼,如果需要區分2xx,4xx等,需要加入 –check-status
https --check-status aaa.xxx.com/api/v1/alert < send.json"
這樣,當2XX返回時, echo $?得到是0;當4xx返回時,echo $? 得到的是4
in輸入管道的問題
這個坑被坑過,指令碼中,in輸入管道被重定向,會被輸入一些資料,產生不可預料的行為。
應該–ignore-stdin
例如:
https --check-status --ignore-stdin aaa.xxx.com/api/v1/alert < send.json"
課外:有趣的http-prompt
pip install http-prompt 後
你可以體驗用全新的理念來操作httpie的方法
http-prompt
解疑
- 當使用環境變數時,無法正常使用,如:
export phone=1862030xxxx
https aaa.xxx.com/api/v1/alert send_type=tts to:='["${phone}"]' content="this is alert"
解答
本質是單引號內的變數不會被正常解析,後端收到的to的value實際是${phone}。
單引號內如果需要解析變數,多加一層單引號即可,如下:
https aaa.xxx.com/api/v1/alert send_type=tts to:='["'${phone}'"]' content="this is alert"
實際上,如果shell有語法高亮,也會發現單引號裡面其實是不會翻譯變數的。
(提高:對於很多語言,也是遵循這個規則,單引號內的變數不翻譯,雙引號內才翻譯變數,例如groovy語言等)
相關推薦
你應該立刻放下curl,拿起httpie來高效幹活
背景 本文作者長期從事微服務開發,在實踐中,httpie給我提效不少。 如果你還在使用curl,那麼這篇文章就是給你的。 python有一個給人類使用的requests庫,非常的簡單方便。httpie就是基於requests開發的,給人類用的命令列工具,取
放下2018 ,拿起2019
2018匆匆而逝,感謝生活,感謝身邊的每一個人,讓我學會了很多,懂得了很多,這是一個有意思的一年。 人這一生,有些人,不可避免,你總會遇到,他會給你上一段時間的課,就會從你的路上離開,而我,在今年也遇
在右側我們給出了一個已經基本完成的程式,讀入了一個字串,呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成
在右側我們給出了一個已經基本完成的程式,讀入了一個字串,呼叫了一個叫str_len的函式來計算這個字串的長度,並輸出。 聰明的你應該已經發現了,這個叫str_len的函式並沒有完成,在不修改函式原型的情況下,請完成str_len函式,實現我們上述的功能吧。 樣例輸入 複製 abc
面試沒你想象中的難,拿Offer也可以很輕鬆
前言 首先祝大家端午節安康! 大概在一個月前就已經打算寫一篇關於我三月份面試的一個總結了,但由於沒有時間在加上還沒有想好該怎麼寫,所以一直沒有寫。適逢端午佳節,有了一段相對較長的時間可以理理所以決定下筆。 正如標題所說:目前我是一名安卓實習生,現在
基礎的 mysql sql 語句,簡單篇,拿起就用
<?php // mysql 資料庫常用 sql 常用語句記錄(主要是自己忘性大) /***************************************** * 數 * 據 * 庫 * 操 * 作 **************
防火墻導致zookeeper集群異常,kafka起不來
AR environ art ssi 防火 conn 順序 exc 啟動 問題描述: 主機信息: IP hostname 10.0.0.10 host10 10.0.0.12 host12 10.0.0.13 host13 在這三臺主機上部署一套
零基礎學python,北京培訓告訴你應該從哪學起
這是一門神奇的語言,不同於以往從c\c++ 需要自己編寫各種賦值,各種程式碼的編寫,python在所有語言中Python的抽象程度是較高的,是較接近自然語言的,非常容易上手,Python 可以讓你更好的理解程式設計這件事情。 Python的優點有太多 1.未來智慧:自從阿爾法狗戰勝
當問起執行緒池(Java中的ThreadPoolExecutor類),你應該知道的基礎知識點
執行緒池 執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後自動啟動這些任務。執行緒池執行緒都是後臺執行緒。每個執行緒都使用預設的堆疊大小,以預設的優先順序執行,並處於多執行緒單元中。如果某個執行緒在託管程式碼中空閒(如正在等待某個事件),則執行緒池將插入另一個輔助執
萬字長文教你拿起Python,防禦特朗普的Twitter殺傷力!
可視化 過度 第一個 新頁面 val ase fin 響應 cap 新智元推薦 來源:量化投資與機器學習 作者:Ali Alavi、Yumi、Sara Robinson 編輯整理:元子 【新智元導讀】通過對特朗普推文進行NLP分析、打標簽、可視化,讀者不僅僅能夠對
就算你不是電商,你應該為你的電商朋友好好看看這篇文章
size gin 屬性 set 朋友 sdn 商務 通過 每天 典型案例場景:電商客服&倉庫協作管理用戶:天貓電商賣家-米詩緹娜客服-倉庫協作管理作為當今時代通過互聯網進行商品交易的電商服務,絕佳的購物體驗與完好的售後服務直接決定了其品牌價值。比起傳統的實體店來
關於雲計算,雲服務是什麽?我想你應該懂了!
自己 get 客戶 我想 遊戲 個人 gcs 均衡 軟件部署 雲計算很火,大家都在談論雲計算,在IT界混的沒有不知道雲計算的,懂的不懂的都說雲計算是未來的趨勢,大企業小廠商都去搞雲計算,可是雲計算是什麽?它能為我們帶來什麽好處?小編覺得雲計算就是一種服務,按需使用按量付費,
關於 Token,你應該知道的十件事
敏感信息 you load 冒充 tro hex 服務器 xhr cors 轉自:http://ju.outofmemory.cn/entry/134189 原文是一篇很好的講述 Token 在 Web 應用中使用的文章,而這是我和 Special 合作翻譯的譯文。 1.
做網站SEO優化,這些網絡引流方法,你應該知道
尋求 可能 垃圾郵件 百度搜 如果 什麽 網站鏈接 很快 建立 對於網站SEO優化來說,網站流量的重要性不言而喻!國內的站長平臺工具通過用網站流量來衡量一個網站的權重,當你的網站流量很高的時候,同時會影響你網站的權重,進而影響你網站SEO優化排名。所以說流量對於一個網站的意
[轉]Redis實現緩存,你應該懂的哪些思路!
校驗 mem img /etc 元素 內存 大小 cfb bre 場景一:類似於微博,實現關註和被關註功能。 思路: 對每個用戶使用兩個集合類型鍵,用來存儲關註別人的用戶和被該用戶關註的用戶。當用戶A關註用戶B的時候,執行兩步操作: sadd user:A B sadd u
FTP的主動模式和被動模式,你應該用那種?
FTP 原理 主動模式 被動模式 FTP文件傳輸分為兩種模式,主動(PORT)模式和被動(Passive)模式,用戶應該用哪種? - 簡單粗暴,直接上答案 1)如果不是必須需要,不要使用FTP服務,主動/被動模式,命令/數據端口,初學者很容易一下子就被搞蒙。 2)如果一定要使用FTP服務,
去BAT,你應該要看一看的面試經驗總結
沖突 編譯器 地方 源碼 也會 ive l數據庫 udp 做的 我去年12月份從上一家公司離職,一直到今年3月份,基本上都在面試中度過來的。 先交代下背景:坐標上海,做技術開發,我本人面試的職位是linux服務器開發,最傾向的職位是服務器開發主程或技術經理。我本人也是上幾家
Java調用存儲過程,你應該好好了解一下
text bbc call sele python 詳細 關註 ural -o 存儲過程是指保存在數據庫並在數據庫端執行的程序。你可以使用特殊的語法在Java類中調用存儲過程。在調用時,存儲過程的名稱及指定的參數通過JDBC連接發送給DBMS,執行存儲過程並通過連接(如果有
Select 使用不當引發的core,你應該知道的
retcode 代碼 async fetch sse com 基礎 -a cnblogs 排查一個死機問題,搞了好幾天時間,最終確定原因;最終確定問題原因,在此分享一下; 第一步:常規根據core文件查看棧信息,gdb –c core xxxx 如下rip不正確,指令地址錯
那個說程序員就應該加班的HR,我有一萬句MMP想對你說
不相信 現在 包括 獲得 的人 小夥伴 朋友 朋友圈 研發 先說我的觀點:程序員工資高,是因為有能力,而不是會加班! 事情是這樣~~~ 這幾天我公司研發部的小夥伴連續好幾天加班到很晚,我在他們工位後面看著他們疲憊的身影,心中五味雜陳。 於是,我在朋友圈感慨了一句: 其他部門
關於分散式儲存,這是你應該知道的(圖文詳解)(關於儲存的一些好文轉載--1)
轉自:http://stor.51cto.com/art/201711/556946.htm 關於分散式儲存,這是你應該知道的(圖文詳解) 前言 分散式儲存存在的風險,其實就是因為“共享”、“大資料量”、“高效能”和X86伺服器+廉價的磁碟為載體之間的矛盾所產生的,不是有些讀者說的“資料