From eb8c48f3ac9c388ab117426bd1d139b9016fd150 Mon Sep 17 00:00:00 2001 From: mac_zhou <mac_zhou@me.com> Date: Thu, 13 Jun 2024 17:48:15 +0800 Subject: [PATCH] feat: enforce IPv4 usage in HTTP client --- provider/ip_service/ip_service.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/provider/ip_service/ip_service.go b/provider/ip_service/ip_service.go index e60e798..0d2a00e 100644 --- a/provider/ip_service/ip_service.go +++ b/provider/ip_service/ip_service.go @@ -1,12 +1,16 @@ package ip_service import ( + "context" "errors" + "log/slog" + "net" + "net/http" + "strings" + "github.com/go-resty/resty/v2" "github.com/spf13/viper" "github.com/we11adam/uddns/provider" - "log/slog" - "strings" ) var SERVICES = map[string]string{ @@ -38,6 +42,18 @@ func init() { func New(names *ServiceNames) (provider.Provider, error) { httpClient := resty.New() + + // Set transport to use tcp4 + // ip_service use your access ip to get your public ip + transport := &http.Transport{ + DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { + // just use tcp4 + dialer := &net.Dialer{} + return dialer.DialContext(ctx, "tcp4", addr) + }, + } + httpClient.SetTransport(transport) + // 1. Remove proxy so that the request is sent directly to the service // 2. Set user agent to curl so that the service does not return an HTML page httpClient.RemoveProxy().SetHeaders(map[string]string{"User-Agent": "curl/8.6.0"})