goHttpProMaxPlus
更新: 11/15/2024 字数: 0 字 时长: 0 分钟
Go quickly request http and Support for AOP
go快速请求Http, 同时支持AOP
以下英语均为机翻
Import dependence 导入依赖
shell
go get github.com/971181317/goHttpProMaxPlus
Quick start 快速开始
First build a server with the gin
framework
首先用gin
框架搭建一个服务器
go
import "github.com/gin-gonic/gin"
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "This is a GET method",
})
})
r.POST("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"msg": "This is a POST method",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
Next use goHttpProMaxPlus
to quickly request Get
and Post
接下来使用goHttpProMaxPlus
快速请求Get
和Post
go
import . "github.com/971181317/goHttpProMaxPlus"
resp, err := GetDefaultClient().Get("http://localhost:8080")
if err != nil {
panic(err)
}
fmt.Println(resp.GetRespStr())
resp, err = GetDefaultClient().Post("http://localhost:8080")
if err != nil {
panic(err)
}
fmt.Println(resp.GetRespStr())
result
结果
text
{"msg":"This is a GET method"}
{"msg":"This is a POST method"}
It's pretty easy, right?
芜湖,起飞(老师,老师,我已经会get和post了)!!!
But what if you want to use Header
, Cookie
, or Form
?
但如果想使用Header
,Cookie
或者Form
怎么办呢?
go
// cookie, header, form: map[string]string
// data: *io.Reader
GetDefaultClient().GetWithCookieAndHeader(url, cookie, header)
GetDefaultClient().PostWithForm(url, form)
GetDefaultClient().PostWithCookieHeaderAndForm(url, cookie, header, form)
GetDefaultClient().PostWithIoData(url sting, data)
GetDefaultClient().PostWithCookieHeaderAndIoData(url, cookie, header, data)
AOP
5 Aspects:
- BeforeClientBuild
- AfterClientBuild
- BeforeRequestBuild
- AfterRequestBuild
- AfterResponseCreate
Custom HTTP request 自定义请求
4 Steps:
create client
go// AspectModel 切片模组 type AspectModel func(...interface{}) // HttpClient A client send request type HttpClient struct { c *http.Client BeforeClientBuild AspectModel AfterClientBuild AspectModel BeforeRequestBuild AspectModel AfterRequestBuild AspectModel AfterResponseCreate AspectModel AspectArgs []interface{} // Only the most recent assignment will be kept }
create it and use aspect
go// This method execute BeforeClientBuild and AfterClientBuild. func NewClientX(client *http.Client, beforeClientBuild, afterClientBuild, beforeRequestBuild, afterRequestBuild, afterResponseCreate AspectModel, args ...interface{}) *HttpClient
create request
go// Forms > Json > Xml > File > ReaderBody type HttpRequest struct { Method HttpMethod URL string Cookies map[string]string Headers map[string]string Queries map[string]string Forms map[string]string Json *string Xml *string File *os.File ReaderBody *io.Reader }
Two types of assignment
go// 1. chain req := NewHttpRequest(). SetMethod(POST). SetURL("http://localhost:8080"). AppendHeader("header", "headerValue"). AppendCookie("cookie", "cookieValue"). AppendForm("form", "formValue"). AppendQuery("query", "queryValue") // 2. req := &HttpRequest{ Method HttpMethod URL "http://localhost:8080" Cookies ... Headers ... Queries ... Forms ... ... }
do request
goresp, err := client.Do(req)
get request body
gotype HttpResponse struct { resp *http.Response Headers map[string]string body io.ReadCloser bodyStr *string } func (hr *HttpResponse) ParseJson(v interface{}) func (hr *HttpResponse) GetRespStr() string