prox5/mr_worldwide.go

56 lines
1.4 KiB
Go

package prox5
import (
"crypto/tls"
"net/http"
"sync"
"time"
)
func (p5 *ProxyEngine) newHTTPClient() any {
timeout := p5.GetServerTimeout()
hc := &http.Client{
Transport: &http.Transport{
DialContext: p5.DialContext,
TLSClientConfig: &tls.Config{InsecureSkipVerify: p5.GetHTTPTLSVerificationStatus() == false}, //nolint:gosec
// TLSHandshakeTimeout: p5.GetServerTimeout(),
DisableKeepAlives: true,
DisableCompression: false,
// MaxIdleConnsPerHost: 5,
// MaxConnsPerHost: 0,
// IdleConnTimeout: 0,
// ResponseHeaderTimeout: 0,
// ExpectContinueTimeout: 0,
// TLSNextProto: nil,
// ProxyConnectHeader: nil,
// GetProxyConnectHeader: nil,
// MaxResponseHeaderBytes: 0,
// WriteBufferSize: 0,
// ReadBufferSize: 0,
// ForceAttemptHTTP2: false,
},
}
if timeout != time.Duration(0) {
hc.Timeout = timeout
}
return hc
}
// GetHTTPClient retrieves a pointer to an http.Client powered by mysteryDialer.
func (p5 *ProxyEngine) GetHTTPClient() *http.Client {
if p5.httpOptsDirty.Load() {
p5.httpClients = &sync.Pool{
New: p5.newHTTPClient,
}
p5.httpOptsDirty.Store(false)
}
return p5.httpClients.Get().(*http.Client)
}
// RoundTrip is Mr. WorldWide. Obviously. See: https://pkg.go.dev/net/http#RoundTripper
func (p5 *ProxyEngine) RoundTrip(req *http.Request) (*http.Response, error) {
return p5.GetHTTPClient().Do(req)
}