gitee.com/h79/goutils@v1.22.10/common/http/client.go (about)

     1  package http
     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  		}).DialContext,
    30  		MaxIdleConns:          100,
    31  		IdleConnTimeout:       90 * time.Second,
    32  		TLSHandshakeTimeout:   10 * time.Second,
    33  		ExpectContinueTimeout: 1 * time.Second,
    34  		ForceAttemptHTTP2:     true,
    35  		MaxIdleConnsPerHost:   runtime.GOMAXPROCS(0) + 1,
    36  	}
    37  	return transport
    38  }
    39  
    40  // DefaultClient returns a new http.Client with similar default values to
    41  // http.Client, but with a non-shared Transport, idle connections disabled, and keepalives disabled.
    42  func DefaultClient() *http.Client {
    43  	return &http.Client{
    44  		Transport: DefaultTransport(),
    45  	}
    46  }
    47  
    48  // DefaultPooledClient returns a new http.Client with similar default values to
    49  // http.Client, but with a shared Transport. Do not use this function for
    50  // transient clients as it can leak file descriptors over time. Only use this
    51  // for clients that will be re-used for the same host(s).
    52  func DefaultPooledClient() *http.Client {
    53  	return &http.Client{
    54  		Transport: DefaultPooledTransport(),
    55  	}
    56  }