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 } }