動(dòng)手造輪子 —— dotnet-HTTPie

動(dòng)手造輪子 —— dotnet-HTTPie
Intro
HTTPie 是一個(gè)基于 Python 的 HTTP CLI 工具,這也意味著想用 HTTPie 就需要安裝 Python 環(huán)境,不想裝 Python 環(huán)境,于是想用 C# 也寫(xiě)一個(gè)類似的東西,HTTPie 的語(yǔ)法很簡(jiǎn)單、簡(jiǎn)潔而且功能強(qiáng)大,基本可以完全取代 cURL,最近寫(xiě)了一個(gè)類似的工具 dotnet-HTTPie,遵循著 HTTPie 的語(yǔ)法,HTTPie 怎么用使用 dotnet-HTTPie 基本也是一樣的,簡(jiǎn)化 API 的測(cè)試



安裝
dotnet-HTTPie 是一個(gè) dotnet tool,所以你可以按照 dotnet tool 的安裝方式來(lái)進(jìn)行安裝
使用下面的命令來(lái)安裝最新的穩(wěn)定版 dotnet-HTTPie
dotnet tool install --global dotnet-httpie
如果想要使用最新的預(yù)覽版,可以使用下面的命令:
dotnet tool install --global dotnet-httpie --version *-*
使用指南
語(yǔ)法如下:
http [flags] [Method] URL [item [item]]
常用的 HTTP Method 都是支持的 OPTIONS/HEAD/GET/POST/PUT/DELETE/PATCH 都是支持的
item 支持三種:
| 類型 | 語(yǔ)法 |
|---|---|
| QueryString | name==test |
| Header | X-Api-Key:test |
| Request-Data | name=test, raw data field example(Only effective for JSON): age:=10, job:='{"Id":1,"Name":"test"}'(Escape needed for Windows) |
Sample1:
http -v https://reservation.weihanli.xyz/health
output:
GET /health HTTP/1.1
Host: reservation.weihanli.xyz
Schema: https
Content-Type: application/json;charset=utf-8
User-Agent: dotnet-HTTPie/0.1.0
HTTP/1.1 200 OK
Connection: keep-alive
Date: Tue, 03 Aug 2021 14:40:00 GMT
Server: nginx/1.14.1
Transfer-Encoding: chunked
healthy
不指定 HTTP Method 并且沒(méi)有 Request Data 的時(shí)候默認(rèn)方法是
GET
-v代表--verbose要輸出所有的請(qǐng)求和響應(yīng)信息,包括請(qǐng)求頭、請(qǐng)求body、響應(yīng)頭和響應(yīng)body,默認(rèn)地只輸出響應(yīng)頭和響應(yīng)消息體,你也可以通過(guò) --print 來(lái)更精確的控制輸出選項(xiàng),例如只打印請(qǐng)求和響應(yīng)頭信息可以用:--print=HhH:request headers, B:request body,
h:response headers, b:response body
Sample2:
http -v https://reservation.weihanli.xyz/health hello==world Api-Version:2.0 name=XiaoMing age:=10 flag:=true job:='{"id":1,"name":"tester"}'
output:
POST /health?hello=world HTTP/1.1
Host: reservation.weihanli.xyz
Schema: https
Api-Version: 2.0
Content-Type: application/json;charset=utf-8
User-Agent: dotnet-HTTPie/0.1.0
{"name":"XiaoMing","age":10,"flag":true,"job":{"id":1,"name":"tester"}}
HTTP/1.1 200 OK
Connection: keep-alive
Date: Tue, 03 Aug 2021 14:39:18 GMT
Server: nginx/1.14.1
Transfer-Encoding: chunked
healthy
因?yàn)闆](méi)有指定 HTTP Method 又包含 request data,所以默認(rèn)方法是 POST
默認(rèn)的有 Request Data 的時(shí)候,會(huì)把數(shù)據(jù)組裝成 JSON,并且會(huì)指定
Content-Type為application/json如上所示,如果想要使用 form 方式可以指定-f或--form
Docker
我們也提供了基于 docker 的使用方式,可以使用 weihanli:dotnet-httpie:latest 來(lái)獲取最新的鏡像,目前 docker 鏡像是在 runtime 的鏡像里裝了一下這個(gè) dotnet tool,實(shí)現(xiàn)方式可以參考:在 dotnet runtime 的容器中安裝 dotnet global tool 以及文末的項(xiàng)目源碼

Design
基于中間件的設(shè)計(jì),通過(guò)不同的中間件處理不同的參數(shù)(flag)
目前一共分成三種中間件
HttpHandlerMiddlewareRequestMiddlewareResponseMiddleware
// HttpHandlerMiddleware
serviceCollection
.AddHttpHandlerMiddleware<FollowRedirectMiddleware>()
.AddHttpHandlerMiddleware<HttpSslMiddleware>()
;
// RequestMiddleware
serviceCollection
.AddRequestMiddleware<QueryStringMiddleware>()
.AddRequestMiddleware<RequestHeadersMiddleware>()
.AddRequestMiddleware<RequestDataMiddleware>()
.AddRequestMiddleware<DefaultRequestMiddleware>()
;
// ResponseMiddleware
serviceCollection.AddResponseMiddleware<DefaultResponseMiddleware>();
通過(guò)中間件來(lái)擴(kuò)展不同的功能,想要支持新的參數(shù)和功能注冊(cè)一個(gè)自定義的中間件即可
這里借用一下 asp.net core 的中間件的圖

More
我們還提供了一些特別的特性,比如:
指定 --offline可以打印請(qǐng)求頭和請(qǐng)求 Body 而不發(fā)送請(qǐng)求
針對(duì) localhost的請(qǐng)求我們可以簡(jiǎn)化,比如訪問(wèn)http://localhost:5000/api/values可以使用:5000/api/values來(lái)訪問(wèn),默認(rèn)的 schema 是http,如果是 https://localhost:5001/api/values,可以通過(guò)--schema=https來(lái)指定 schema,完整腳本:http --schema=https :5001/api/values
更多功能等你來(lái)發(fā)掘~~
目前還只支持比較基本和我覺(jué)得比較常用的功能還有一些功能需要增加和改進(jìn),有興趣的童鞋歡迎 issue 歡迎 PR
dotnet-HTTPie 會(huì)支持絕大部分 HTTPie 的功能并將優(yōu)化和改進(jìn)一些用著不太方便的地方,如果你是 curl 用戶,有大佬做了一個(gè)從 curl 到 HTTPie 的工具,可以參考: https://curlipie.now.sh/
References
https://github.com/WeihanLi/dotnet-httpie HTTPie docs: https://httpie.io/docs Curl to HTTPie request tool: https://curlipie.now.sh/
【推薦】.NET Core開(kāi)發(fā)實(shí)戰(zhàn)視頻課程 ★★★
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門(mén)篇-開(kāi)篇及總體規(guī)劃
【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開(kāi)篇及目錄索引
Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)
.NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了
10個(gè)小技巧助您寫(xiě)出高性能的ASP.NET Core代碼
用abp vNext快速開(kāi)發(fā)Quartz.NET定時(shí)任務(wù)管理界面
在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度
現(xiàn)身說(shuō)法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化
