package service import ( "context" "net/http" "os" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/gclient" ) type RequestContext struct { *gclient.Client context.Context } /** * 统一API请求方法 * @param void * @author dc.To * @version 20250313 */ func Request(ctx context.Context) *RequestContext { c := &RequestContext{ Client: gclient.New(), Context: ctx, } url, err := g.Cfg("api").Get(ctx, "url") if err != nil { g.Log().Error(ctx, "Api url not found in config file: ", err.Error()) } c.SetPrefix(url.String()) c.SetContentType("application/json") c.Use(handle) return c } func (r *RequestContext) Header(k, v string) *RequestContext { r.SetHeader(k, v) return r } func (r *RequestContext) ContentType(t string) *RequestContext { r.SetContentType(t) return r } func (r *RequestContext) Get(path string, data interface{}) (*gclient.Response, error) { return r.Client.Get(r.Context, path, data) } func (r *RequestContext) Post(path string, data interface{}) (*gclient.Response, error) { return r.Client.Post(r.Context, path, data) } func (r *RequestContext) GetVar(path string, data interface{}) *g.Var { return r.Client.GetVar(r.Context, path, data) } func (r *RequestContext) PostVar(path string, data interface{}) *g.Var { return r.Client.PostVar(r.Context, path, data) } func (r *RequestContext) GetBytes(path string, data interface{}) []byte { return r.Client.GetBytes(r.Context, path, data) } func (r *RequestContext) PostBytes(path string, data interface{}) []byte { return r.Client.PostBytes(r.Context, path, data) } func (r *RequestContext) GetContent(path string, data interface{}) string { return r.Client.GetContent(r.Context, path, data) } func (r *RequestContext) PostContent(path string, data interface{}) string { return r.Client.PostContent(r.Context, path, data) } func handle(c *gclient.Client, r *http.Request) (resp *gclient.Response, err error) { resp, err = c.Next(r) if os.Getenv("APP_ENV") == "dev" { resp.RawDump() } return resp, err }