You can not 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-library/utils/http/http.go

117 lines
2.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package http
import (
"encoding/json"
"github.com/bitly/go-simplejson"
"github.com/dtapps/go-library/utils/request"
"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
}