package participant import ( "crypto/tls" "errors" "fmt" "net/http" "time" "github.com/go-resty/resty/v2" ) type ReqCallback func(req *resty.Request) var ( NoRedirectClient *resty.Client RestyClient *resty.Client HttpClient *http.Client ) var UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36" var DefaultTimeout = time.Hour * 1 func InitClient() { NoRedirectClient = resty.New().SetRedirectPolicy( resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }), ).SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}) NoRedirectClient.SetHeader("user-agent", UserAgent) RestyClient = NewRestyClient() HttpClient = NewHttpClient() } func NewRestyClient() *resty.Client { client := resty.New(). SetHeader("user-agent", UserAgent). SetRetryCount(3). SetRetryResetReaders(true). SetTimeout(DefaultTimeout). SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}) return client } func NewHttpClient() *http.Client { return &http.Client{ Timeout: time.Hour * 48, Transport: &http.Transport{ Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }, } } func Request(url string, method string, callback ReqCallback) ([]byte, error) { respErr := &RespErr{} req := RestyClient.R(). SetHeaders(map[string]string{ "Content-Type": "application/json", }). SetError(&respErr) if callback != nil { callback(req) } res, err := req.Execute(method, url) if err != nil { return nil, err } if respErr.Message != "" { return nil, errors.New(respErr.Message) } if res.StatusCode() != http.StatusOK && res.StatusCode() != http.StatusCreated { return nil, errors.New(fmt.Sprintf("msg: %s, status: %d", res.String(), res.StatusCode())) } return res.Body(), nil }