github.com/webx-top/com@v1.2.12/httpClientOptions/options.go (about)

     1  package httpClientOptions
     2  
     3  import (
     4  	"context"
     5  	"crypto/tls"
     6  	"net"
     7  	"net/http"
     8  	"net/url"
     9  	"time"
    10  
    11  	"github.com/webx-top/com"
    12  )
    13  
    14  func InsecureSkipVerify(skips ...bool) com.HTTPClientOptions {
    15  	skip := true
    16  	if len(skips) > 0 {
    17  		skip = skips[0]
    18  	}
    19  	return func(c *http.Client) {
    20  		if c.Transport == nil {
    21  			c.Transport = &http.Transport{}
    22  		}
    23  		tr := c.Transport.(*http.Transport)
    24  		if tr.TLSClientConfig == nil {
    25  			tr.TLSClientConfig = &tls.Config{}
    26  		}
    27  		tr.TLSClientConfig.InsecureSkipVerify = skip
    28  	}
    29  }
    30  
    31  func Proxy(fn func(*http.Request) (*url.URL, error)) com.HTTPClientOptions {
    32  	return func(c *http.Client) {
    33  		if c.Transport == nil {
    34  			c.Transport = &http.Transport{}
    35  		}
    36  		tr := c.Transport.(*http.Transport)
    37  		tr.Proxy = fn
    38  	}
    39  }
    40  
    41  func DialContext(fn func(ctx context.Context, network, addr string) (net.Conn, error)) com.HTTPClientOptions {
    42  	return func(c *http.Client) {
    43  		if c.Transport == nil {
    44  			c.Transport = &http.Transport{}
    45  		}
    46  		tr := c.Transport.(*http.Transport)
    47  		tr.DialContext = fn
    48  	}
    49  }
    50  
    51  func Dial(fn func(network, addr string) (net.Conn, error)) com.HTTPClientOptions {
    52  	return func(c *http.Client) {
    53  		if c.Transport == nil {
    54  			c.Transport = &http.Transport{}
    55  		}
    56  		tr := c.Transport.(*http.Transport)
    57  		tr.Dial = fn
    58  	}
    59  }
    60  
    61  func DialTLSContext(fn func(ctx context.Context, network, addr string) (net.Conn, error)) com.HTTPClientOptions {
    62  	return func(c *http.Client) {
    63  		if c.Transport == nil {
    64  			c.Transport = &http.Transport{}
    65  		}
    66  		tr := c.Transport.(*http.Transport)
    67  		tr.DialTLSContext = fn
    68  	}
    69  }
    70  
    71  func DialTLS(fn func(network, addr string) (net.Conn, error)) com.HTTPClientOptions {
    72  	return func(c *http.Client) {
    73  		if c.Transport == nil {
    74  			c.Transport = &http.Transport{}
    75  		}
    76  		tr := c.Transport.(*http.Transport)
    77  		tr.Dial = fn
    78  	}
    79  }
    80  
    81  func TLSClientConfig(cfg *tls.Config) com.HTTPClientOptions {
    82  	return func(c *http.Client) {
    83  		if c.Transport == nil {
    84  			c.Transport = &http.Transport{}
    85  		}
    86  		tr := c.Transport.(*http.Transport)
    87  		tr.TLSClientConfig = cfg
    88  	}
    89  }
    90  
    91  func TLSHandshakeTimeout(t time.Duration) com.HTTPClientOptions {
    92  	return func(c *http.Client) {
    93  		if c.Transport == nil {
    94  			c.Transport = &http.Transport{}
    95  		}
    96  		tr := c.Transport.(*http.Transport)
    97  		tr.TLSHandshakeTimeout = t
    98  	}
    99  }
   100  
   101  func DisableKeepAlives(disabled bool) com.HTTPClientOptions {
   102  	return func(c *http.Client) {
   103  		if c.Transport == nil {
   104  			c.Transport = &http.Transport{}
   105  		}
   106  		tr := c.Transport.(*http.Transport)
   107  		tr.DisableKeepAlives = disabled
   108  	}
   109  }
   110  
   111  func DisableCompression(disabled bool) com.HTTPClientOptions {
   112  	return func(c *http.Client) {
   113  		if c.Transport == nil {
   114  			c.Transport = &http.Transport{}
   115  		}
   116  		tr := c.Transport.(*http.Transport)
   117  		tr.DisableCompression = disabled
   118  	}
   119  }
   120  
   121  func MaxIdleConns(max int) com.HTTPClientOptions {
   122  	return func(c *http.Client) {
   123  		if c.Transport == nil {
   124  			c.Transport = &http.Transport{}
   125  		}
   126  		tr := c.Transport.(*http.Transport)
   127  		tr.MaxIdleConns = max
   128  	}
   129  }
   130  
   131  func MaxIdleConnsPerHost(max int) com.HTTPClientOptions {
   132  	return func(c *http.Client) {
   133  		if c.Transport == nil {
   134  			c.Transport = &http.Transport{}
   135  		}
   136  		tr := c.Transport.(*http.Transport)
   137  		tr.MaxIdleConnsPerHost = max
   138  	}
   139  }
   140  
   141  func MaxConnsPerHost(max int) com.HTTPClientOptions {
   142  	return func(c *http.Client) {
   143  		if c.Transport == nil {
   144  			c.Transport = &http.Transport{}
   145  		}
   146  		tr := c.Transport.(*http.Transport)
   147  		tr.MaxConnsPerHost = max
   148  	}
   149  }
   150  
   151  func IdleConnTimeout(t time.Duration) com.HTTPClientOptions {
   152  	return func(c *http.Client) {
   153  		if c.Transport == nil {
   154  			c.Transport = &http.Transport{}
   155  		}
   156  		tr := c.Transport.(*http.Transport)
   157  		tr.IdleConnTimeout = t
   158  	}
   159  }
   160  
   161  func ResponseHeaderTimeout(t time.Duration) com.HTTPClientOptions {
   162  	return func(c *http.Client) {
   163  		if c.Transport == nil {
   164  			c.Transport = &http.Transport{}
   165  		}
   166  		tr := c.Transport.(*http.Transport)
   167  		tr.ResponseHeaderTimeout = t
   168  	}
   169  }
   170  
   171  func ExpectContinueTimeout(t time.Duration) com.HTTPClientOptions {
   172  	return func(c *http.Client) {
   173  		if c.Transport == nil {
   174  			c.Transport = &http.Transport{}
   175  		}
   176  		tr := c.Transport.(*http.Transport)
   177  		tr.ExpectContinueTimeout = t
   178  	}
   179  }
   180  
   181  func TLSNextProto(next map[string]func(authority string, c *tls.Conn) http.RoundTripper) com.HTTPClientOptions {
   182  	return func(c *http.Client) {
   183  		if c.Transport == nil {
   184  			c.Transport = &http.Transport{}
   185  		}
   186  		tr := c.Transport.(*http.Transport)
   187  		tr.TLSNextProto = next
   188  	}
   189  }
   190  
   191  func ProxyConnectHeader(header http.Header) com.HTTPClientOptions {
   192  	return func(c *http.Client) {
   193  		if c.Transport == nil {
   194  			c.Transport = &http.Transport{}
   195  		}
   196  		tr := c.Transport.(*http.Transport)
   197  		tr.ProxyConnectHeader = header
   198  	}
   199  }
   200  
   201  func MaxResponseHeaderBytes(max int64) com.HTTPClientOptions {
   202  	return func(c *http.Client) {
   203  		if c.Transport == nil {
   204  			c.Transport = &http.Transport{}
   205  		}
   206  		tr := c.Transport.(*http.Transport)
   207  		tr.MaxResponseHeaderBytes = max
   208  	}
   209  }
   210  
   211  func WriteBufferSize(size int) com.HTTPClientOptions {
   212  	return func(c *http.Client) {
   213  		if c.Transport == nil {
   214  			c.Transport = &http.Transport{}
   215  		}
   216  		tr := c.Transport.(*http.Transport)
   217  		tr.WriteBufferSize = size
   218  	}
   219  }
   220  
   221  func ReadBufferSize(size int) com.HTTPClientOptions {
   222  	return func(c *http.Client) {
   223  		if c.Transport == nil {
   224  			c.Transport = &http.Transport{}
   225  		}
   226  		tr := c.Transport.(*http.Transport)
   227  		tr.ReadBufferSize = size
   228  	}
   229  }
   230  
   231  func ForceAttemptHTTP2(on bool) com.HTTPClientOptions {
   232  	return func(c *http.Client) {
   233  		if c.Transport == nil {
   234  			c.Transport = &http.Transport{}
   235  		}
   236  		tr := c.Transport.(*http.Transport)
   237  		tr.ForceAttemptHTTP2 = on
   238  	}
   239  }
   240  
   241  func Transport(tr *http.Transport) com.HTTPClientOptions {
   242  	return func(c *http.Client) {
   243  		c.Transport = tr
   244  	}
   245  }
   246  
   247  func CheckRedirect(fn func(req *http.Request, via []*http.Request) error) com.HTTPClientOptions {
   248  	return func(c *http.Client) {
   249  		c.CheckRedirect = fn
   250  	}
   251  }
   252  
   253  func CookieJar(cookieJar http.CookieJar) com.HTTPClientOptions {
   254  	return func(c *http.Client) {
   255  		c.Jar = cookieJar
   256  	}
   257  }
   258  
   259  func Timeout(timeout time.Duration) com.HTTPClientOptions {
   260  	return func(c *http.Client) {
   261  		c.Timeout = timeout
   262  	}
   263  }