Go quickly request http and Support for AOP
go快速请求Http, 同时支持AOP
要不是公司用go,我才不会写他呢!!!
以下英语均为机翻
go get github.com/971181317/goHttpProMaxPlus
First build a server with the gin framework
首先用gin框架搭建一个服务器
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:8080Next use goHttpProMaxPlus to quickly request Get and Post
接下来使用goHttpProMaxPlus快速请求Get和Post
import . "github.com/971181317/goHttpProMaxPlus"resp, err:=GetDefaultClient().Get("http://localhost:8080")
iferr!=nil {
panic(err)
}
fmt.Println(resp.GetRespStr())
resp, err=GetDefaultClient().Post("http://localhost:8080")
iferr!=nil {
panic(err)
}
fmt.Println(resp.GetRespStr())result
结果
{"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怎么办呢?
// cookie, header, form: map[string]string// data: *io.ReaderGetDefaultClient().GetWithCookieAndHeader(url, cookie, header)
GetDefaultClient().PostWithForm(url, form)
GetDefaultClient().PostWithCookieHeaderAndForm(url, cookie, header, form)
GetDefaultClient().PostWithIoData(urlsting, data)
GetDefaultClient().PostWithCookieHeaderAndIoData(url, cookie, header, data)5 Aspects:
- BeforeClientBuild
- AfterClientBuild
- BeforeRequestBuild
- AfterRequestBuild
- AfterResponseCreate
4 Steps:
- create client
// AspectModel 切片模组typeAspectModelfunc(...interface{})
// HttpClient A client send requesttypeHttpClientstruct {
c*http.ClientBeforeClientBuildAspectModelAfterClientBuildAspectModelBeforeRequestBuildAspectModelAfterRequestBuildAspectModelAfterResponseCreateAspectModelAspectArgs []interface{} // Only the most recent assignment will be kept
}create it and use aspect
// This method execute BeforeClientBuild and AfterClientBuild.funcNewClientX(client*http.Client,
beforeClientBuild, afterClientBuild, beforeRequestBuild, afterRequestBuild, afterResponseCreateAspectModel,
args...interface{}) *HttpClient- create request
// Forms > Json > Xml > File > ReaderBodytypeHttpRequeststruct {
MethodHttpMethodURLstringCookiesmap[string]stringHeadersmap[string]stringQueriesmap[string]stringFormsmap[string]stringJson*stringXml*stringFile*os.FileReaderBody*io.Reader
}Two types of assignment
// 1. chainreq:=NewHttpRequest().
SetMethod(POST).
SetURL("http://localhost:8080").
AppendHeader("header", "headerValue").
AppendCookie("cookie", "cookieValue").
AppendForm("form", "formValue").
AppendQuery("query", "queryValue")
// 2.req:=&HttpRequest{
MethodHttpMethodURL "http://localhost:8080"Cookies...Headers...Queries...Forms......
}- do request
resp, err:=client.Do(req)- get request body
typeHttpResponsestruct {
resp*http.ResponseHeadersmap[string]stringbody io.ReadCloserbodyStr*string
}
func (hr*HttpResponse) ParseJson(vinterface{})
func (hr*HttpResponse) GetRespStr() string