74 lines
1.6 KiB
Go
Raw Normal View History

2025-04-22 15:46:48 +08:00
package httpclient
import (
"admin/internal/errcode"
"admin/lib/xlog"
"encoding/json"
"io"
"net/http"
"strings"
"time"
)
func Request(addr string, method string, body interface{}, resData interface{}) error {
removeUrl := checkUrl(addr)
//xlog.Debugf("-->req url: %v", removeUrl)
var res *http.Response
var err error
if method != "get" {
var bodyReader io.Reader
if body != nil {
bodyBytes, err := json.Marshal(body)
if err != nil {
xlog.Warnf(err)
return errcode.New(errcode.ServerError, "数据解析失败:%v", err)
}
bodyReader = strings.NewReader(string(bodyBytes))
}
client := &http.Client{
Timeout: time.Second * 3,
}
req, err := http.NewRequest(method, removeUrl, bodyReader)
if err != nil {
xlog.Warnf(err)
return errcode.New(errcode.ServerError, "数据请求创建失败:%v", err)
}
res, err = client.Do(req)
if err != nil {
xlog.Warnf(err)
return errcode.New(errcode.ServerError, "数据请求失败:%v", err)
}
} else {
res, err = http.Get(removeUrl)
}
// 获取数据
defer res.Body.Close()
resBody, err := io.ReadAll(res.Body)
if err != nil {
xlog.Warnf(err)
return errcode.New(errcode.ServerError, "数据解析失败:%v", err)
}
xlog.Debugf("request url:%v, rsp:%v", removeUrl, string(resBody))
if err = json.Unmarshal(resBody, resData); err != nil {
return errcode.New(errcode.ServerError, "数据(%v)格式错误:%v", string(resBody), err)
}
//xlog.Debugf("%+v", resData)
return nil
}
func checkUrl(u string) string {
if strings.Contains(u, `http://`) || strings.Contains(u, `https://`) {
return u
} else {
return `http://` + u
}
}