54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package client
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
userAgentHeader = "User-Agent"
|
|
)
|
|
|
|
type predefinedHeaderTransport struct {
|
|
useragentName string
|
|
http.Transport
|
|
}
|
|
|
|
func (pht *predefinedHeaderTransport) RoundTrip(req *http.Request) (res *http.Response, err error) {
|
|
req.Close = pht.DisableKeepAlives
|
|
req.Header.Set(userAgentHeader, pht.useragentName)
|
|
res, err = pht.Transport.RoundTrip(req)
|
|
return
|
|
}
|
|
|
|
// NewRoundTripper returns a http.RoundTripper that has some tunable parameters.
|
|
func NewRoundTripper(
|
|
keepaliveDuration time.Duration,
|
|
connectTimeout time.Duration,
|
|
responseHeaderTimeout time.Duration,
|
|
idleConnectionTimeout time.Duration,
|
|
maxIdleConnections int,
|
|
serverName string,
|
|
) http.RoundTripper {
|
|
|
|
keepaliveDisabled := keepaliveDuration == 0
|
|
dialer := &net.Dialer{
|
|
Timeout: connectTimeout,
|
|
KeepAlive: keepaliveDuration,
|
|
}
|
|
|
|
return &predefinedHeaderTransport{
|
|
useragentName: serverName,
|
|
Transport: http.Transport{
|
|
DisableKeepAlives: keepaliveDisabled,
|
|
DisableCompression: true,
|
|
MaxIdleConnsPerHost: maxIdleConnections,
|
|
DialContext: dialer.DialContext,
|
|
MaxIdleConns: maxIdleConnections,
|
|
IdleConnTimeout: idleConnectionTimeout,
|
|
ResponseHeaderTimeout: responseHeaderTimeout,
|
|
},
|
|
}
|
|
}
|