56 lines
1.4 KiB
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)
|
|
}
|