Documentation
¶
Index ¶
- func DefaultRetryCondition(resp *Response, err error) bool
- func IsRetryableError(err error) bool
- func IsTemporaryError(err error) bool
- func RetryAlways() func(*Response, error) bool
- func RetryNever() func(*Response, error) bool
- func RetryOnError() func(*Response, error) bool
- func RetryOnStatusCodes(codes ...int) func(*Response, error) bool
- func SetDefaultClient(client *Client)
- type BasicAuth
- type Client
- func (c *Client) Delete(url string) *RequestBuilder
- func (c *Client) Get(url string) *RequestBuilder
- func (c *Client) Head(url string) *RequestBuilder
- func (c *Client) Options(url string) *RequestBuilder
- func (c *Client) Patch(url string) *RequestBuilder
- func (c *Client) Post(url string) *RequestBuilder
- func (c *Client) Put(url string) *RequestBuilder
- func (c *Client) Request() *RequestBuilder
- type ClientOption
- func WithBaseURL(baseURL string) ClientOption
- func WithCookieJar() ClientOption
- func WithCustomCookieJar(jar http.CookieJar) ClientOption
- func WithDebug(debug bool) ClientOption
- func WithHTTPClient(httpClient *http.Client) ClientOption
- func WithHeader(key, value string) ClientOption
- func WithHeaders(headers map[string]string) ClientOption
- func WithInsecureSkipVerify() ClientOption
- func WithMaxIdleConns(n int) ClientOption
- func WithMaxIdleConnsPerHost(n int) ClientOption
- func WithMiddleware(middleware Middleware) ClientOption
- func WithProxy(proxyURL string) ClientOption
- func WithQueryParams(params map[string]string) ClientOption
- func WithRetry(config *RetryConfig) ClientOption
- func WithTLSConfig(config *tls.Config) ClientOption
- func WithTimeout(timeout time.Duration) ClientOption
- func WithTransport(transport *http.Transport) ClientOption
- func WithUserAgent(ua string) ClientOption
- type FileUpload
- type HandlerFunc
- type Metrics
- type Middleware
- func AuthMiddleware(token string) Middleware
- func CacheMiddleware(ttl time.Duration) Middleware
- func ComposeMiddlewares(middlewares ...Middleware) Middleware
- func DebugMiddleware() Middleware
- func ErrorHandlerMiddleware(handler func(*Response, error) error) Middleware
- func LoggingMiddleware() Middleware
- func MetricsMiddleware(metrics *Metrics) Middleware
- func RateLimitMiddleware(maxRequests int, duration time.Duration) Middleware
- func RetryCountMiddleware() Middleware
- func StatusCodeCheckMiddleware() Middleware
- func TimeoutMiddleware(timeout time.Duration) Middleware
- func UserAgentMiddleware(userAgent string) Middleware
- type RequestBuilder
- func (rb *RequestBuilder) AfterResponse(hook func(*Response) error) *RequestBuilder
- func (rb *RequestBuilder) BasicAuth(username, password string) *RequestBuilder
- func (rb *RequestBuilder) BearerToken(token string) *RequestBuilder
- func (rb *RequestBuilder) BeforeRequest(hook func(*http.Request) error) *RequestBuilder
- func (rb *RequestBuilder) Body(body io.Reader) *RequestBuilder
- func (rb *RequestBuilder) BodyBytes(data []byte) *RequestBuilder
- func (rb *RequestBuilder) BodyString(data string) *RequestBuilder
- func (rb *RequestBuilder) ContentType(contentType string) *RequestBuilder
- func (rb *RequestBuilder) Context(ctx context.Context) *RequestBuilder
- func (rb *RequestBuilder) Delete(url string) *RequestBuilder
- func (rb *RequestBuilder) Do() (*Response, error)
- func (rb *RequestBuilder) File(fieldName, filePath string) *RequestBuilder
- func (rb *RequestBuilder) FileUpload(fieldName string, upload FileUpload) *RequestBuilder
- func (rb *RequestBuilder) Form(key string, value interface{}) *RequestBuilder
- func (rb *RequestBuilder) FormData(data map[string]interface{}) *RequestBuilder
- func (rb *RequestBuilder) Get(url string) *RequestBuilder
- func (rb *RequestBuilder) Head(url string) *RequestBuilder
- func (rb *RequestBuilder) Header(key, value string) *RequestBuilder
- func (rb *RequestBuilder) Headers(headers map[string]string) *RequestBuilder
- func (rb *RequestBuilder) JSON(data interface{}) *RequestBuilder
- func (rb *RequestBuilder) Method(method string) *RequestBuilder
- func (rb *RequestBuilder) Options(url string) *RequestBuilder
- func (rb *RequestBuilder) Patch(url string) *RequestBuilder
- func (rb *RequestBuilder) Post(url string) *RequestBuilder
- func (rb *RequestBuilder) Put(url string) *RequestBuilder
- func (rb *RequestBuilder) Query(key string, value interface{}) *RequestBuilder
- func (rb *RequestBuilder) QueryParams(params map[string]interface{}) *RequestBuilder
- func (rb *RequestBuilder) QueryStruct(v interface{}) *RequestBuilder
- func (rb *RequestBuilder) Retry(config *RetryConfig) *RequestBuilder
- func (rb *RequestBuilder) WithRetryConfig(config *RetryConfig) *RequestBuilder
- func (rb *RequestBuilder) WithSimpleRetry(maxAttempts int) *RequestBuilder
- func (rb *RequestBuilder) XML(data interface{}) *RequestBuilder
- type Response
- func (r *Response) Bytes() []byte
- func (r *Response) Clone() *Response
- func (r *Response) ContentType() string
- func (r *Response) Error() error
- func (r *Response) GetCookie(name string) (*http.Cookie, error)
- func (r *Response) GetHeader(key string) string
- func (r *Response) GetHeaders(key string) []string
- func (r *Response) IsClientError() bool
- func (r *Response) IsEmpty() bool
- func (r *Response) IsHTML() bool
- func (r *Response) IsJSON() bool
- func (r *Response) IsServerError() bool
- func (r *Response) IsSuccess() bool
- func (r *Response) IsXML() bool
- func (r *Response) JSON(v interface{}) error
- func (r *Response) RawResponse() *http.Response
- func (r *Response) SaveToFile(filename string) error
- func (r *Response) Size() int
- func (r *Response) StatusIs(code int) bool
- func (r *Response) String() string
- func (r *Response) ToResult() Result
- func (r *Response) XML(v interface{}) error
- type Result
- type RetryCallback
- type RetryConfig
- func DefaultRetryConfig() *RetryConfig
- func ExponentialBackoff(initialDelay time.Duration, multiplier float64, maxAttempts int) *RetryConfig
- func FixedDelay(delay time.Duration, maxAttempts int) *RetryConfig
- func LinearBackoff(initialDelay, increment time.Duration) *RetryConfig
- func NewRetryConfig(maxAttempts int) *RetryConfig
- func RetryWithCallback(callback RetryCallback) *RetryConfig
- type RetryableError
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DefaultRetryCondition ¶
DefaultRetryCondition 默认重试条件 重试以下情况: 1. 网络错误 2. 5xx 服务器错误 3. 408 请求超时 4. 429 请求过多
func RetryOnStatusCodes ¶
RetryOnStatusCodes 根据状态码重试
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client HTTP 客户端,支持丰富的配置选项
func (*Client) Delete ¶
func (c *Client) Delete(url string) *RequestBuilder
Delete 发送 DELETE 请求(快捷方法)
func (*Client) Options ¶
func (c *Client) Options(url string) *RequestBuilder
Options 发送 OPTIONS 请求(快捷方法)
type ClientOption ¶
type ClientOption func(*Client)
ClientOption 客户端配置选项函数
func WithCustomCookieJar ¶
func WithCustomCookieJar(jar http.CookieJar) ClientOption
WithCustomCookieJar 使用自定义 CookieJar
func WithHTTPClient ¶
func WithHTTPClient(httpClient *http.Client) ClientOption
WithHTTPClient 使用自定义的 http.Client
func WithInsecureSkipVerify ¶
func WithInsecureSkipVerify() ClientOption
WithInsecureSkipVerify 跳过 TLS 证书验证(不推荐在生产环境使用)
func WithMaxIdleConnsPerHost ¶
func WithMaxIdleConnsPerHost(n int) ClientOption
WithMaxIdleConnsPerHost 设置每个主机的最大空闲连接数
func WithQueryParams ¶
func WithQueryParams(params map[string]string) ClientOption
WithQueryParams 设置默认查询参数
func WithTransport ¶
func WithTransport(transport *http.Transport) ClientOption
WithTransport 自定义 Transport
type FileUpload ¶
FileUpload 文件上传配置
type Metrics ¶
type Metrics struct {
TotalRequests int64
SuccessRequests int64
FailedRequests int64
TotalDuration time.Duration
}
MetricsMiddleware 指标收集中间件
type Middleware ¶
type Middleware func(HandlerFunc) HandlerFunc
Middleware 中间件类型
func CacheMiddleware ¶
func CacheMiddleware(ttl time.Duration) Middleware
func ComposeMiddlewares ¶
func ComposeMiddlewares(middlewares ...Middleware) Middleware
ComposeMiddlewares 组合多个中间件
func ErrorHandlerMiddleware ¶
func ErrorHandlerMiddleware(handler func(*Response, error) error) Middleware
ErrorHandlerMiddleware 错误处理中间件
func MetricsMiddleware ¶
func MetricsMiddleware(metrics *Metrics) Middleware
func RateLimitMiddleware ¶
func RateLimitMiddleware(maxRequests int, duration time.Duration) Middleware
RateLimitMiddleware 限流中间件
func RetryCountMiddleware ¶
func RetryCountMiddleware() Middleware
RetryCountMiddleware 重试计数中间件(记录重试次数到 context)
func StatusCodeCheckMiddleware ¶
func StatusCodeCheckMiddleware() Middleware
StatusCodeCheckMiddleware 状态码检查中间件
func TimeoutMiddleware ¶
func TimeoutMiddleware(timeout time.Duration) Middleware
TimeoutMiddleware 超时中间件
func UserAgentMiddleware ¶
func UserAgentMiddleware(userAgent string) Middleware
UserAgentMiddleware 设置 User-Agent 中间件
type RequestBuilder ¶
type RequestBuilder struct {
// contains filtered or unexported fields
}
RequestBuilder 请求构建器,支持链式调用
func (*RequestBuilder) AfterResponse ¶
func (rb *RequestBuilder) AfterResponse(hook func(*Response) error) *RequestBuilder
AfterResponse 添加响应后钩子
func (*RequestBuilder) BasicAuth ¶
func (rb *RequestBuilder) BasicAuth(username, password string) *RequestBuilder
BasicAuth 设置 HTTP Basic 认证
func (*RequestBuilder) BearerToken ¶
func (rb *RequestBuilder) BearerToken(token string) *RequestBuilder
BearerToken 设置 Bearer Token
func (*RequestBuilder) BeforeRequest ¶
func (rb *RequestBuilder) BeforeRequest(hook func(*http.Request) error) *RequestBuilder
BeforeRequest 添加请求前钩子
func (*RequestBuilder) Body ¶
func (rb *RequestBuilder) Body(body io.Reader) *RequestBuilder
Body 设置原始 body
func (*RequestBuilder) BodyBytes ¶
func (rb *RequestBuilder) BodyBytes(data []byte) *RequestBuilder
BodyBytes 设置字节数组 body
func (*RequestBuilder) BodyString ¶
func (rb *RequestBuilder) BodyString(data string) *RequestBuilder
BodyString 设置字符串 body
func (*RequestBuilder) ContentType ¶
func (rb *RequestBuilder) ContentType(contentType string) *RequestBuilder
ContentType 设置 Content-Type
func (*RequestBuilder) Context ¶
func (rb *RequestBuilder) Context(ctx context.Context) *RequestBuilder
Context 设置上下文
func (*RequestBuilder) Delete ¶
func (rb *RequestBuilder) Delete(url string) *RequestBuilder
Delete 设置为 DELETE 请求
func (*RequestBuilder) File ¶
func (rb *RequestBuilder) File(fieldName, filePath string) *RequestBuilder
File 添加文件上传(通过文件路径)
func (*RequestBuilder) FileUpload ¶
func (rb *RequestBuilder) FileUpload(fieldName string, upload FileUpload) *RequestBuilder
FileUpload 添加文件上传(通过 Reader)
func (*RequestBuilder) Form ¶
func (rb *RequestBuilder) Form(key string, value interface{}) *RequestBuilder
Form 设置表单字段
func (*RequestBuilder) FormData ¶
func (rb *RequestBuilder) FormData(data map[string]interface{}) *RequestBuilder
FormData 批量设置表单数据
func (*RequestBuilder) Get ¶
func (rb *RequestBuilder) Get(url string) *RequestBuilder
Get 设置为 GET 请求
func (*RequestBuilder) Head ¶
func (rb *RequestBuilder) Head(url string) *RequestBuilder
Head 设置为 HEAD 请求
func (*RequestBuilder) Header ¶
func (rb *RequestBuilder) Header(key, value string) *RequestBuilder
Header 设置请求头
func (*RequestBuilder) Headers ¶
func (rb *RequestBuilder) Headers(headers map[string]string) *RequestBuilder
Headers 批量设置请求头
func (*RequestBuilder) JSON ¶
func (rb *RequestBuilder) JSON(data interface{}) *RequestBuilder
JSON 设置 JSON body
func (*RequestBuilder) Method ¶
func (rb *RequestBuilder) Method(method string) *RequestBuilder
Method 设置请求方法
func (*RequestBuilder) Options ¶
func (rb *RequestBuilder) Options(url string) *RequestBuilder
Options 设置为 OPTIONS 请求
func (*RequestBuilder) Patch ¶
func (rb *RequestBuilder) Patch(url string) *RequestBuilder
Patch 设置为 PATCH 请求
func (*RequestBuilder) Post ¶
func (rb *RequestBuilder) Post(url string) *RequestBuilder
Post 设置为 POST 请求
func (*RequestBuilder) Put ¶
func (rb *RequestBuilder) Put(url string) *RequestBuilder
Put 设置为 PUT 请求
func (*RequestBuilder) Query ¶
func (rb *RequestBuilder) Query(key string, value interface{}) *RequestBuilder
Query 添加查询参数
func (*RequestBuilder) QueryParams ¶
func (rb *RequestBuilder) QueryParams(params map[string]interface{}) *RequestBuilder
QueryParams 批量添加查询参数
func (*RequestBuilder) QueryStruct ¶
func (rb *RequestBuilder) QueryStruct(v interface{}) *RequestBuilder
QueryStruct 从结构体设置查询参数(使用 json tag)
func (*RequestBuilder) Retry ¶
func (rb *RequestBuilder) Retry(config *RetryConfig) *RequestBuilder
Retry 设置重试配置
func (*RequestBuilder) WithRetryConfig ¶
func (rb *RequestBuilder) WithRetryConfig(config *RetryConfig) *RequestBuilder
WithRetryConfig 创建带重试配置的请求
func (*RequestBuilder) WithSimpleRetry ¶
func (rb *RequestBuilder) WithSimpleRetry(maxAttempts int) *RequestBuilder
WithSimpleRetry 简单重试配置(仅设置次数)
func (*RequestBuilder) XML ¶
func (rb *RequestBuilder) XML(data interface{}) *RequestBuilder
XML 设置 XML body
type Response ¶
Response HTTP 响应包装器,提供便捷的响应处理方法
func (*Response) ContentType ¶
ContentType 获取响应的 Content-Type
func (*Response) GetHeaders ¶
GetHeaders 获取所有指定名称的响应头
func (*Response) IsClientError ¶
IsClientError 检查是否为客户端错误(状态码 4xx)
func (*Response) IsServerError ¶
IsServerError 检查是否为服务器错误(状态码 5xx)
func (*Response) RawResponse ¶
RawResponse 获取原始的 http.Response(用于需要直接访问的场景)
func (*Response) SaveToFile ¶
SaveToFile 将响应保存到文件
type Result ¶
type Result struct {
StatusCode int
Status string
Body string
Header http.Header
ContentLength int64
}
Result 兼容旧版本的结果结构(向后兼容)
type RetryCallback ¶
WithRetryCallback 添加重试回调
type RetryConfig ¶
type RetryConfig struct {
// MaxAttempts 最大重试次数(包括首次请求)
MaxAttempts int
// InitialDelay 初始延迟时间
InitialDelay time.Duration
// MaxDelay 最大延迟时间
MaxDelay time.Duration
// Multiplier 延迟倍数(用于指数退避)
Multiplier float64
// Jitter 是否添加随机抖动(避免惊群效应)
Jitter bool
// RetryIf 自定义重试条件函数
RetryIf func(*Response, error) bool
}
RetryConfig 重试配置
func ExponentialBackoff ¶
func ExponentialBackoff(initialDelay time.Duration, multiplier float64, maxAttempts int) *RetryConfig
ExponentialBackoff 指数退避策略
func FixedDelay ¶
func FixedDelay(delay time.Duration, maxAttempts int) *RetryConfig
FixedDelay 固定延迟策略
func LinearBackoff ¶
func LinearBackoff(initialDelay, increment time.Duration) *RetryConfig
LinearBackoff 线性退避策略
func RetryWithCallback ¶
func RetryWithCallback(callback RetryCallback) *RetryConfig
RetryWithCallback 带回调的重试执行器
type RetryableError ¶
RetryableError 可重试的错误类型
func (*RetryableError) Error ¶
func (e *RetryableError) Error() string
func (*RetryableError) Unwrap ¶
func (e *RetryableError) Unwrap() error