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"})