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