You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
徐俊杰 41f2436f9f 同上 1 year ago
excample 优化注释 2 years ago
.gitignore 1. 优化说明文档 2 years ago
CHANGELOG.MD first commit 3 years ago
README.MD 更新md文件 1 year ago
authorization.go 优化注释 2 years ago
body.go 1. 修复formdata类型数据请求失败的问题 1 year ago
go.mod 新增bodyentry解析模块,可自定义解析函数 2 years ago
headers.go 优化注释 2 years ago
options.go 优化注释 2 years ago
param.go 优化注释 2 years ago
parser.go 1. 修复formdata类型数据请求失败的问题 1 year ago
pushToGit.sh 自动更新 3 years ago
simpleRequest.go 同上 1 year ago
simpleRequest_test.go 同上 1 year ago
utils.go 优化注释 2 years ago

README.MD

_# simpleRequest

1. 说明

simpleRequest 是一款面向对象开发的http请求库。他是基于Go原生http库。开发这个模块的主要目的是为了更快的对接第三方api接口。 它具备以下特点:

  • 极简化的代码,大大提高了代码编写速度。
  • 更易于理解和使用,减少了资料查询的时间。
  • 更适合对接一些不遵循restful规范的接口。

这是它的一个示例:

var r = simpleRequest.NewRequest()
//设置请求头
r.Headers().Set("x-token", "d+jfdji*D%1=")
// 添加query
r.QueryParams().Set("user", "JJXu").Set("job", "developer")
//--发送请求
res, err := r.GET("http://www.webSite.com/end/point")
if err != nil {
    t.Error(err)
} else {
    fmt.Println(res)
}

2. 如何使用?

2.2 安装

go get github.com/dorlolo/simpleRequest

2.2 模块导入

import  "github.com/dorlolo/simpleRequest"

2.3 实例化

var r = simpleRequest.NewRequest()

2.4 添加请求头

2.4.1 单个赋值

r.Headers().Set("token", "d+jfdji*D%1=")
r.Headers().Set("Content-Type", "application/json")

2.4.2 map赋值

mapHeaders:= map[string]string{
    "token":      "d+jfdji*D%1=",
    "Content-Type": "application/json",
}
r.Headers().Sets(mapHeaders)

2.4.3 链式赋值

r.Headers().Set("token", "d+jfdji*D%1=").Set("Content-Type", "application/json")

2.4.4 添加多值

对单个key添加多只不要使用.set,因为原先的值会被覆盖

r.Headers().Set("Accept", "text/html")
r.Headers().Add("Accept","application/xhtml+xml")
r.Headers().Add("Accept","application/xml;q=0.8")
r.Headers().Add("Accept","image/webp")
r.Headers().Add("Accept","*/*;q=0.8")

2.4.4 使用预设的key

r.Headers().SetConentType("application/json")
//r.Headers().Set("Content-Type", "application/json")

r.Headers().SetUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"")
//r.Headers().Set("User-Agent",Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1")

r.Headers().SetConentEncoding("gzip, deflate, br")
//r.Headers().Set("Content-Encoding", "gzip, deflate, br")

2.4.5 使用预设的key-value

//随机user-agent
r.Headers().SetRandomUerAgent()
//r.Headers().Set("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1")

r.Headers().ConentType_json()
//r.Headers().Set("Content-Type", "application/json")

r.Headers().ConentType_formData()
//r.Headers().Set("Content-Type","multipart/form-data")

r.Headers().ConentType_formUrlencoded()
//r.Headers().Set("Content-Type","application/x-www-form-urlencoded")

r.Headers().ConentType_textPlain()
//r.Headers().Set("Content-Type","text/plain; charset=utf-8")

2.5 添加queryParams

2.5.1 单个赋值

r.QueryParams().Set("user", "dorlolo")

2.5.2 map赋值

不会覆盖上面之前填充过的参数

pamarsBulid := make(map[string]any)
pamarsBulid["passwd"] = "123456"
pamarsBulid["action"] = "login"
r.QueryParams().Sets(pamarsBulid)

2.5.3 链式赋值

r.QueryParams().Set("user", "dorlolo").Set("passwd","123456")

2.5.4 获取url.Values对象进行赋值

对象类型为*url.Values,取到地址后,可以使用url.Values中的方法继续进行赋值

qpData:=r.QueryParams().Gets()
qpData.Add("age","18")

2.6 添加请求体body

2.6.1 单个参数赋值

支持和map赋值同时使用

r.Body().Set("beginDate", "2022-03-01").Set("endDate", "2022-03-03")

2.6.2 map赋值

支持和单个参数赋值同时使用

bodyBulid := map[string]any{
    "beginDate":"2022-03-01",
	"endDate":"2022-03-03",
}
r.Body().Sets(bodyBulid)

2.6.3 技巧:链式赋值

r.Body().Set("beginDate", "2022-03-01").Set("endDate", "2022-03-03")

2.6.4 字符串赋值

此方法为一次性赋值,不支持和其它赋值方法同时使用

bodydata:=`{"devSn":"230000000008","type":"day"}`
r.Body().SetString(bodydata)

2.6.5 字节赋值

此方法为一次性赋值,不支持和其它赋值方法同时使用

bytesdata:=[]byte(`{"devSn":"230000000008","type":"day"}`)
r.Body().SetBytes(bytesdata)

2.6.6 结构体赋值

此方法为一次性赋值,不支持和其它赋值方法同时使用

type demo struct{
	DevSn string `json:"devSn"`
	Type string `json:"day"`
}
modeldata:=demo{
    DevSn:"230000000008"
    Type:"day"
}
r.Body().SetModel(&modeldata)

2.7 文件上传与转发

2.7.1 文件上传

var req = sRequest.NewRequest()
req.Headers().ConentType_formData()
req.Body().
    SetFromDataFile("file", "C:\\Users\\lenovo\\Pictures\\Saved Pictures\\demo.jpg").
    Set("fromFormat", "jpg").
    Set("toFormat", "png")
req.TimeOut(15 * time.Second)
resp, err := req.POST("http://xxx/xxx")
if err != nil {
    fmt.Println(err.Error())
    return
}
fmt.Println(string(resp))

2.7.2 文件转发

下面示例中使用gin作为服务端配合simpleRequest对上传的文件进行转发

  1. 通过multipart.FileHeader对象进行转发
func FileForwardUseMultipartFile(c *gin.Context){
    file,err:=c.FormFile("file")
    
	var req = sRequest.NewRequest()
    req.Headers().ConentType_formData()
    req.Body().
        SetFromDataMultipartFile("file", file).
        Set("fromFormat", "jpg").
        Set("toFormat", "png")
    req.TimeOut(15 * time.Second)
    resp, err := req.POST("http://xxx/xxx")
    if err != nil {
        fmt.Println(err.Error())
        return
    }
   // parse response and so on
   // ...
   // ...
  1. 在一些小众场景下可能已经在外部构建好了body此时也可将body转为bytes传入simpleRequest进行请求
func FileForwardUseBytesBody(c *gin.Context){
    file,err:=c.FormFile("file")
    
    // body data prepare
    vars (
        body = &bytes.Buffer{}
        writer = multipart.NewWriter(body)
    )
    // add file object
    filePart, _ := i.writer.CreateFormFile("file", file.Filename)
    src, err := file.Open()
    if err != nil {
        fmt.Println( err.Error())
        return
    }
    defer src.Close()
    _, err = io.Copy(filePart, src)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    // add other form data
    writer.WriteField("fromFormat", "jpg")
    writer.WriteField("toFormat","png")
    
    // post request
    _ = writer.close()
    var r = simpleRequest.NewRequest()
    req.Headers().SetConentType(writer.FormDataContentType())
    req.Body().SetBytes(body.Bytes())
    req.TimeOut(15 * time.Second)
    resp, err := req.POST("http://xxx/xxx")
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    // parse response and so on
    // ...
    // ...
}

2.8 其它请求参数

2.8.1 设置超时时间

r.TimeOut(time.Second * 30)

2.7.2 跳过证书验证

r.SkipCertVerify()

2.9 发送请求

2.9.1 post请求

res, err :=r.POST("https://127.0.0.1:80/excample")
if err != nil {
    ftm.Println( "error occured", err)
} else {
    fmt.Println(res)
}

支持的请求类型有

  • POST
  • GET
  • PUT
  • DELETE
  • PATCH
  • HEAD
  • CONNECT
  • OPTIONS
  • TRACE

2.10 获取上下文

请注意,需要完成请求后才能获得上下文数据!

2.10.1 获取请求的上下文对象

requestContext:=r.Request

2.10.2 获取返回的上下文对象

responseContext:=r.Response

3. 使用示例

simpleRequest_test.go_