Versions in this module Expand all Collapse all v0 v0.1.0 Sep 1, 2026 Changes in this version + const DefaultDialKeepAlive + const DefaultDialTimeout + const DefaultExpectContinueTimeout + const DefaultHTTP2PingTimeout + const DefaultHTTP2ReadIdleTimeout + const DefaultIdleConnTimeout + const DefaultIdleTimeout + const DefaultMaxCompressionRatio + const DefaultMaxConnsPerHost + const DefaultMaxIdleConns + const DefaultMaxIdleConnsPerHost + const DefaultMaxRedirects + const DefaultMaxRetries + const DefaultMaxRetryAfter + const DefaultMaxRetryBodyBytes + const DefaultResponseHeaderTimeout + const DefaultRetryWaitMax + const DefaultRetryWaitMin + const DefaultTLSHandshakeTimeout + const DefaultTimeout + var ErrBlockedByIPPolicy = errors.New("gttp: target resolves to blocked IP range") + var ErrBodyClose = errors.New("gttp: closing request body") + var ErrBodyIdleTimeout = errors.New("gttp: body idle timeout") + var ErrBodyRead = errors.New("gttp: reading request body for retry") + var ErrBodyRewind = errors.New("gttp: rewinding request body") + var ErrBodyTooLarge = errors.New("gttp: request body exceeds retry buffer limit") + var ErrBodyTransferTooSlow = errors.New("gttp: body transfer rate below minimum") + var ErrDecompressionBomb = errors.New("gttp: decompression ratio exceeded") + var ErrRedirectLoop = errors.New("gttp: redirect loop detected") + var ErrResponseTooLarge = errors.New("gttp: response body exceeds max size") + var ErrSchemeDowngrade = errors.New("gttp: redirect downgrades scheme https to http") + var ErrTooManyRedirects = errors.New("gttp: too many redirects") + func New(opts ...Option) *http.Client + type BodyObservation struct + CompressedBytes int64 + Duration time.Duration + StatusCode int + URL string + UncompressedBytes int64 + type Option func(*config) + func WithAdditionalRetryableMethods(methods ...string) Option + func WithAdditionalRetryableStatusCodes(codes ...int) Option + func WithAllowPrivateRedirects() Option + func WithAllowSchemeDowngrade() Option + func WithBodyObserver(fn func(BodyObservation)) Option + func WithCheckRetry(fn func(req *http.Request, resp *http.Response, err error) bool) Option + func WithDialContext(fn func(ctx context.Context, network, address string) (net.Conn, error)) Option + func WithDialKeepAlive(d time.Duration) Option + func WithDialTimeout(d time.Duration) Option + func WithDisableCompression() Option + func WithDisableKeepAlives() Option + func WithExpectContinueTimeout(d time.Duration) Option + func WithForceHTTP2(force bool) Option + func WithHTTP2PingTimeout(d time.Duration) Option + func WithHTTP2ReadIdleTimeout(d time.Duration) Option + func WithIdleConnTimeout(d time.Duration) Option + func WithIdleTimeout(d time.Duration) Option + func WithMaxCompressionRatio(r float64) Option + func WithMaxConnsPerHost(n int) Option + func WithMaxIdleConns(n int) Option + func WithMaxIdleConnsPerHost(n int) Option + func WithMaxResponseBodyBytes(n int64) Option + func WithMaxResponseHeaderBytes(n int64) Option + func WithMaxRetryAfter(d time.Duration) Option + func WithMaxRetryBodyBytes(n int64) Option + func WithMinTransferRate(bps int64, window time.Duration) Option + func WithNoProxy() Option + func WithNoRedirects() Option + func WithNoRetries() Option + func WithProxy(fn func(*http.Request) (*url.URL, error)) Option + func WithRedirectPolicy(n int) Option + func WithResolver(r *net.Resolver) Option + func WithResponseHeaderTimeout(d time.Duration) Option + func WithRetries(n int) Option + func WithRetryObserver(fn func(attempt int, req *http.Request, resp *http.Response, err error)) Option + func WithRetryWait(minWait, maxWait time.Duration) Option + func WithRetryableMethods(methods ...string) Option + func WithRetryableStatusCodes(codes ...int) Option + func WithSensitiveHeaders(names ...string) Option + func WithStrictSSRFProtection() Option + func WithTLSConfig(cfg *tls.Config) Option + func WithTLSHandshakeTimeout(d time.Duration) Option + func WithTimeout(d time.Duration) Option + func WithTransport(rt http.RoundTripper) Option + func WithUserAgent(ua string) Option