add context dialer support #88

Merged
vtolstov merged 1 commits from ctx_dialer into v3 2022-11-17 00:06:59 +03:00

20
http.go
View File

@ -692,11 +692,21 @@ func NewClient(opts ...client.Option) client.Client {
opts: options, opts: options,
} }
dialer, ok := options.Context.Value(httpDialerKey{}).(*net.Dialer) var dialer func(context.Context, string) (net.Conn, error)
if !ok { if v, ok := options.Context.Value(httpDialerKey{}).(*net.Dialer); ok {
dialer = &net.Dialer{ dialer = func(ctx context.Context, addr string) (net.Conn, error) {
return v.DialContext(ctx, "tcp", addr)
}
}
if options.ContextDialer != nil {
dialer = options.ContextDialer
}
if dialer == nil {
dialer = func(ctx context.Context, addr string) (net.Conn, error) {
return (&net.Dialer{
Timeout: 30 * time.Second, Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second, KeepAlive: 30 * time.Second,
}).DialContext(ctx, "tcp", addr)
} }
} }
@ -706,7 +716,9 @@ func NewClient(opts ...client.Option) client.Client {
// TODO customTransport := http.DefaultTransport.(*http.Transport).Clone() // TODO customTransport := http.DefaultTransport.(*http.Transport).Clone()
tr := &http.Transport{ tr := &http.Transport{
Proxy: http.ProxyFromEnvironment, Proxy: http.ProxyFromEnvironment,
DialContext: dialer.DialContext, DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
return dialer(ctx, addr)
},
ForceAttemptHTTP2: true, ForceAttemptHTTP2: true,
MaxConnsPerHost: 100, MaxConnsPerHost: 100,
MaxIdleConns: 20, MaxIdleConns: 20,