You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

client.go 1.9 kB

3 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package cloud
  2. import (
  3. "crypto/tls"
  4. "errors"
  5. "fmt"
  6. "net/http"
  7. "time"
  8. "github.com/go-resty/resty/v2"
  9. )
  10. type ReqCallback func(req *resty.Request)
  11. var (
  12. NoRedirectClient *resty.Client
  13. RestyClient *resty.Client
  14. HttpClient *http.Client
  15. )
  16. 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"
  17. var DefaultTimeout = time.Second * 300
  18. func InitClient() {
  19. NoRedirectClient = resty.New().SetRedirectPolicy(
  20. resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  21. return http.ErrUseLastResponse
  22. }),
  23. ).SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
  24. NoRedirectClient.SetHeader("user-agent", UserAgent)
  25. RestyClient = NewRestyClient()
  26. HttpClient = NewHttpClient()
  27. }
  28. func NewRestyClient() *resty.Client {
  29. client := resty.New().
  30. SetHeader("user-agent", UserAgent).
  31. SetRetryCount(3).
  32. SetRetryResetReaders(true).
  33. SetTimeout(DefaultTimeout).
  34. SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
  35. return client
  36. }
  37. func NewHttpClient() *http.Client {
  38. return &http.Client{
  39. Timeout: time.Hour * 48,
  40. Transport: &http.Transport{
  41. Proxy: http.ProxyFromEnvironment,
  42. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  43. },
  44. }
  45. }
  46. func Request(url string, method string, callback ReqCallback) ([]byte, error) {
  47. respErr := &RespErr{}
  48. req := RestyClient.R().
  49. SetHeaders(map[string]string{
  50. "Content-Type": "application/json",
  51. }).
  52. SetError(&respErr)
  53. if callback != nil {
  54. callback(req)
  55. }
  56. res, err := req.Execute(method, url)
  57. if err != nil {
  58. return nil, err
  59. }
  60. if respErr.Message != "" {
  61. return nil, errors.New(respErr.Message)
  62. }
  63. if res.StatusCode() != http.StatusOK && res.StatusCode() != http.StatusCreated {
  64. return nil, errors.New(fmt.Sprintf("msg: %s, status: %d", res.String(), res.StatusCode()))
  65. }
  66. return res.Body(), nil
  67. }

PCM is positioned as Software stack over Cloud, aiming to build the standards and ecology of heterogeneous cloud collaboration for JCC in a non intrusive and autonomous peer-to-peer manner.