基於 .NET 9 + K8S 寫了個 MockHttp

Never、C發表於2024-11-25

MockHTTP

MockHTTP 可以將現有HTTP轉換成GET請求,設定cron定時呼叫,自定義程式碼去格式化資料,通知到你的郵箱裡。
比如每天早上時自動獲取部落格園文章列表,天氣下雨時通知,各類簽到等

Request

建立一個請求

可以使用VSCode或VS,建立一個.http檔案

POST https://www.wdora.com/mockhttp/request/xxx

GET https://www.cnblogs.com/ HTTP/1.1
Host: www.cnblogs.com
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

使用請求

返回物件:

GET https://www.wdora.com/mockhttp/request/xxx

響應報文原始格式:

GET https://www.wdora.com/mockhttp/request/xxx?raw=true

定時排程

每天早上9點收到1個郵件,內容為請求返回的物件Body

POST https://www.wdora.com/mockhttp/sched/yyy
Content-Type: application/json

{"cron": "0 9 * * *", "requestName": "xxx", "notifyEmail": "xx@yy.com" }

原始的物件Body 是一個html, 不易讀,可以自定義程式碼格式化(基於.NET 9 BCL, 支援XPath, JToken)

POST https://www.wdora.com/mockhttp/sched/yyy
Content-Type: application/json

{"cron": "0 9 * * *", "requestName": "xxx", "notifyEmail": "xx@yy.com", "parseCode": "x => string.Join(';', XPath.Parse(x.Body, \"//article//div/a\"))" }
  • parseCode 會被編譯成 Func<Response, object>,返回null,則不通知
  • XPath.Parse 是基於 HtmlAgilityPack 二次封裝的方法(更方便呼叫,也支援原有的 HtmlAgilityPack 的方法)
  • JToken.Parse 是基於 Newtonsoft.Json 自帶的方法
  • 你也可以使用.NET 自帶的Regex 等能力去定製化返回
  • 由於本應用容器化限制了最多 100 MB 的記憶體,所以你的定製化程式碼應儘量減少記憶體佔用

會收到一封郵件

相關文章