diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ecc77d1..e7a21b23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v1.0.9 / 2021-05-31 + +- 【助手】增加http函数 + ## v1.0.8 / 2021-05-31 - 【助手】增加url函数 diff --git a/helper/http/http.go b/helper/http/http.go new file mode 100644 index 00000000..5b541957 --- /dev/null +++ b/helper/http/http.go @@ -0,0 +1,116 @@ +package http + +import ( + "GoLibrary/helper/request" + "encoding/json" + "github.com/bitly/go-simplejson" + "gopkg.in/h2non/gentleman.v2" + "gopkg.in/h2non/gentleman.v2/plugins/body" +) + +// GetJson 发起Get请求 +func GetJson(url string, data string, headers map[string]interface{}) (res []byte, err error) { + // 创建一个 HTTP 客户端cli + cli := gentleman.New() + // 设置要请求的 URL 基础地址 + cli.URL(url + "?" + data) + // 创建一个请求对象req + req := cli.Request() + req.SetHeader("Content-Type", "application/json; charset=utf-8") + for key, value := range headers { + // 设置请求首部(Header) + req.SetHeader(key, value.(string)) + } + req.SetHeader("User-Agent", request.GetUserAgent()) + // 发送请求,获取响应对象res + response, err := req.Send() + if err != nil { + panic(err) + } + res = response.Bytes() + if json.Valid(res) == false { + panic("http server json error GetJson " + url + "?" + data) + } + return +} + +// PostJson 发起POST请求 +func PostJson(url string, data map[string]interface{}, headers map[string]interface{}) (res []byte, err error) { + // 创建一个 HTTP 客户端cli + cli := gentleman.New() + // 设置要请求的 URL 基础地址 + cli.URL(url) + cli.Use(body.JSON(data)) + // 创建一个请求对象req + req := cli.Request() + req.Method("POST") + req.SetHeader("Content-Type", "application/json; charset=utf-8") + for key, value := range headers { + // 设置请求首部(Header) + req.SetHeader(key, value.(string)) + } + req.SetHeader("User-Agent", request.GetUserAgent()) + // 发送请求,获取响应对象res + response, err := req.Send() + if err != nil { + panic(err) + } + res = response.Bytes() + if json.Valid(res) == false { + panic("http server json error PostJson " + url) + } + return +} + +// PostXml 发起POST请求 +func PostXml(url string, data map[string]string, headers map[string]interface{}) (res []byte, err error) { + // 创建一个 HTTP 客户端cli + cli := gentleman.New() + // 设置要请求的 URL 基础地址 + cli.URL(url) + cli.Use(body.XML(data)) + // 创建一个请求对象req + req := cli.Request() + req.Method("POST") + for key, value := range headers { + // 设置请求首部(Header) + req.SetHeader(key, value.(string)) + } + req.SetHeader("User-Agent", request.GetUserAgent()) + // 发送请求,获取响应对象res + response, err := req.Send() + if err != nil { + panic(err) + } + res = response.Bytes() + return +} + +// GetResponseBytes 兼容多层 Key 读取 +func GetResponseBytes(data []byte, keys ...string) (b []byte, err error) { + js, err := simplejson.NewJson(data) + if err != nil { + return + } + for _, key := range keys { + js = js.Get(key) + } + b, err = js.Encode() + return +} + +// GetResponseArrayIndexBytes 兼容多层 Key 读取某个 +func GetResponseArrayIndexBytes(data []byte, index int, keys ...string) (b []byte, err error) { + js, err := simplejson.NewJson(data) + if err != nil { + return + } + for _, key := range keys { + js = js.Get(key) + } + + js = js.GetIndex(index) + + b, err = js.Encode() + return +}