diff options
author | Jordan <me@jordan.im> | 2022-02-10 14:54:24 -0700 |
---|---|---|
committer | Jordan <me@jordan.im> | 2022-02-10 14:54:24 -0700 |
commit | dc39be70c4b9dbb4cf330ddc7776340551a4764c (patch) | |
tree | 98d5ab21f92a8e1db130a3020cbc8803ff21f724 /client.go | |
parent | 2dfdfd864285c5a12cd47e446fc8bdf244fd58f8 (diff) | |
download | crawl-dc39be70c4b9dbb4cf330ddc7776340551a4764c.tar.gz crawl-dc39be70c4b9dbb4cf330ddc7776340551a4764c.zip |
client, crawl: --bind, support making outbound requests from a particular address
Diffstat (limited to 'client.go')
-rw-r--r-- | client.go | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -66,3 +66,32 @@ func NewHTTPClientWithDNSOverride(dnsMap map[string]string) *http.Client { Jar: jar, } } + +// NewHTTPClientWithLocalAddrOverride returns an http.Client suitable for +// crawling, with a LocalAddr override for making outbound connections using +// an explicit interface +func NewHTTPClientWithLocalAddrOverride(addr *net.IPAddr) *http.Client { + jar, _ := cookiejar.New(nil) // nolint + localTCPAddr := net.TCPAddr{ + IP: addr.IP, + } + transport := &http.Transport{ + DialContext: (&net.Dialer{ + LocalAddr: &localTCPAddr, + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + DualStack: false, + }).DialContext, + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, // nolint + }, + } + return &http.Client{ + Timeout: defaultClientTimeout, + Transport: transport, + CheckRedirect: func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse + }, + Jar: jar, + } +} |