50 lines
943 B
Go
50 lines
943 B
Go
package httpTracker
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"net"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
type Client struct {
|
|
hc *http.Client
|
|
url_ *url.URL
|
|
}
|
|
|
|
type (
|
|
ProxyFunc func(*http.Request) (*url.URL, error)
|
|
DialContextFunc func(ctx context.Context, network, addr string) (net.Conn, error)
|
|
)
|
|
|
|
type NewClientOpts struct {
|
|
Proxy ProxyFunc
|
|
DialContext DialContextFunc
|
|
ServerName string
|
|
AllowKeepAlive bool
|
|
}
|
|
|
|
func NewClient(url_ *url.URL, opts NewClientOpts) Client {
|
|
return Client{
|
|
url_: url_,
|
|
hc: &http.Client{
|
|
Transport: &http.Transport{
|
|
DialContext: opts.DialContext,
|
|
Proxy: opts.Proxy,
|
|
TLSClientConfig: &tls.Config{
|
|
InsecureSkipVerify: true,
|
|
ServerName: opts.ServerName,
|
|
},
|
|
// This is for S3 trackers that hold connections open.
|
|
DisableKeepAlives: !opts.AllowKeepAlive,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func (cl Client) Close() error {
|
|
cl.hc.CloseIdleConnections()
|
|
return nil
|
|
}
|