...

Source file src/github.com/hashicorp/go-cleanhttp/cleanhttp.go

Documentation: github.com/hashicorp/go-cleanhttp

     1  package cleanhttp
     2  
     3  import (
     4  	"net"
     5  	"net/http"
     6  	"runtime"
     7  	"time"
     8  )
     9  
    10  // DefaultTransport returns a new http.Transport with similar default values to
    11  // http.DefaultTransport, but with idle connections and keepalives disabled.
    12  func DefaultTransport() *http.Transport {
    13  	transport := DefaultPooledTransport()
    14  	transport.DisableKeepAlives = true
    15  	transport.MaxIdleConnsPerHost = -1
    16  	return transport
    17  }
    18  
    19  // DefaultPooledTransport returns a new http.Transport with similar default
    20  // values to http.DefaultTransport. Do not use this for transient transports as
    21  // it can leak file descriptors over time. Only use this for transports that
    22  // will be re-used for the same host(s).
    23  func DefaultPooledTransport() *http.Transport {
    24  	transport := &http.Transport{
    25  		Proxy: http.ProxyFromEnvironment,
    26  		DialContext: (&net.Dialer{
    27  			Timeout:   30 * time.Second,
    28  			KeepAlive: 30 * time.Second,
    29  			DualStack: true,
    30  		}).DialContext,
    31  		MaxIdleConns:          100,
    32  		IdleConnTimeout:       90 * time.Second,
    33  		TLSHandshakeTimeout:   10 * time.Second,
    34  		ExpectContinueTimeout: 1 * time.Second,
    35  		ForceAttemptHTTP2:     true,
    36  		MaxIdleConnsPerHost:   runtime.GOMAXPROCS(0) + 1,
    37  	}
    38  	return transport
    39  }
    40  
    41  // DefaultClient returns a new http.Client with similar default values to
    42  // http.Client, but with a non-shared Transport, idle connections disabled, and
    43  // keepalives disabled.
    44  func DefaultClient() *http.Client {
    45  	return &http.Client{
    46  		Transport: DefaultTransport(),
    47  	}
    48  }
    49  
    50  // DefaultPooledClient returns a new http.Client with similar default values to
    51  // http.Client, but with a shared Transport. Do not use this function for
    52  // transient clients as it can leak file descriptors over time. Only use this
    53  // for clients that will be re-used for the same host(s).
    54  func DefaultPooledClient() *http.Client {
    55  	return &http.Client{
    56  		Transport: DefaultPooledTransport(),
    57  	}
    58  }
    59  

View as plain text