client.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package httpclient
  2. import (
  3. "time"
  4. "github.com/go-resty/resty/v2"
  5. )
  6. // Client HTTP 客户端包装器
  7. type Client struct {
  8. *resty.Client
  9. }
  10. // Config 客户端配置
  11. type Config struct {
  12. Timeout time.Duration
  13. RetryCount int
  14. RetryWaitTime time.Duration
  15. }
  16. // DefaultConfig 默认配置
  17. func DefaultConfig() Config {
  18. return Config{
  19. Timeout: 30 * time.Second,
  20. RetryCount: 0,
  21. RetryWaitTime: 100 * time.Millisecond,
  22. }
  23. }
  24. // New 创建新的 HTTP 客户端
  25. func New(cfg Config) *Client {
  26. client := resty.New().
  27. SetTimeout(cfg.Timeout).
  28. SetRetryCount(cfg.RetryCount).
  29. SetRetryWaitTime(cfg.RetryWaitTime)
  30. return &Client{Client: client}
  31. }
  32. // NewDefault 创建默认配置的客户端
  33. func NewDefault() *Client {
  34. return New(DefaultConfig())
  35. }
  36. // WithBaseURL 设置基础 URL
  37. func (c *Client) WithBaseURL(url string) *Client {
  38. c.SetBaseURL(url)
  39. return c
  40. }
  41. // WithHeader 设置请求头
  42. func (c *Client) WithHeader(key, value string) *Client {
  43. c.SetHeader(key, value)
  44. return c
  45. }
  46. // WithHeaders 设置多个请求头
  47. func (c *Client) WithHeaders(headers map[string]string) *Client {
  48. c.SetHeaders(headers)
  49. return c
  50. }
  51. // WithAuthToken 设置认证 Token
  52. func (c *Client) WithAuthToken(token string) *Client {
  53. c.SetAuthToken(token)
  54. return c
  55. }
  56. // WithBearerAuth 设置 Bearer 认证
  57. func (c *Client) WithBearerAuth(token string) *Client {
  58. c.SetAuthScheme("Bearer")
  59. c.SetAuthToken(token)
  60. return c
  61. }