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 }