diff --git a/netutil/http.go b/netutil/http.go index d12b5009..c9269da3 100644 --- a/netutil/http.go +++ b/netutil/http.go @@ -108,6 +108,7 @@ type HttpClientConfig struct { HandshakeTimeout time.Duration ResponseTimeout time.Duration Verbose bool + Proxy *url.URL } // defaultHttpClientConfig defalut client config. @@ -163,6 +164,11 @@ func NewHttpClientWithConfig(config *HttpClientConfig) *HttpClient { client.TLS = config.TLSConfig } + if config.Proxy != nil { + transport := client.Client.Transport.(*http.Transport) + transport.Proxy = http.ProxyURL(config.Proxy) + } + return client } diff --git a/netutil/http_test.go b/netutil/http_test.go index e83010ae..96818297 100644 --- a/netutil/http_test.go +++ b/netutil/http_test.go @@ -11,6 +11,7 @@ import ( "net/url" "os" "testing" + "time" "github.com/duke-git/lancet/v2/internal" ) @@ -361,3 +362,23 @@ func TestSendRequestWithFilePath(t *testing.T) { t.Fatalf("expected %d, got %d", http.StatusOK, resp.StatusCode) } } + +func TestProxy(t *testing.T) { + config := &HttpClientConfig{ + HandshakeTimeout: 20 * time.Second, + ResponseTimeout: 40 * time.Second, + // Use the proxy ip to add it here + //Proxy: &url.URL{ + // Scheme: "http", + // Host: "46.17.63.166:18888", + //}, + } + httpClient := NewHttpClientWithConfig(config) + resp, err := httpClient.Get("https://www.ipplus360.com/getLocation") + if err != nil { + t.Fatal(err) + } + if resp.StatusCode != http.StatusOK { + t.Fatalf("expected %d, got %d", http.StatusOK, resp.StatusCode) + } +}