Skip to content

971181317/goHttpProMaxPlus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goHttpProMaxPlus

Go quickly request http and Support for AOP

go快速请求Http, 同时支持AOP

要不是公司用go,我才不会写他呢!!!

以下英语均为机翻

Import dependence 导入依赖

go get github.com/971181317/goHttpProMaxPlus

Quick start 快速开始

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:8080

Next use goHttpProMaxPlus to quickly request Get and Post

接下来使用goHttpProMaxPlus快速请求GetPost

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

结果

{"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?

但如果想使用HeaderCookie或者Form怎么办呢?

// 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:

  1. BeforeClientBuild
  2. AfterClientBuild
  3. BeforeRequestBuild
  4. AfterRequestBuild
  5. AfterResponseCreate

Custom HTTP request 自定义请求

4 Steps:

  1. create client
// 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

// This method execute BeforeClientBuild and AfterClientBuild.
func NewClientX(client *http.Client,
	beforeClientBuild, afterClientBuild, beforeRequestBuild, afterRequestBuild, afterResponseCreate AspectModel,
	args ...interface{}) *HttpClient
  1. create request
// 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

// 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      ...
    ...
}
  1. do request
resp, err := client.Do(req)
  1. get request body
type 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