„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie beschränke ich die IP-Adresse des HTTP-Clients von Go, wenn mehrere NICs vorhanden sind?

Wie beschränke ich die IP-Adresse des HTTP-Clients von Go, wenn mehrere NICs vorhanden sind?

Veröffentlicht am 08.11.2024
Durchsuche:469

How do I constrain the IP address of Go\'s HTTP client when multiple NICs are present?

So beschränken Sie die IP-Adresse des HTTP-Clients

Der http.Client von Go ermöglicht effiziente HTTP-Anfragen, aber wie können Sie seine IP-Adresse einschränken, wenn Ihre System beherbergt mehrere NICs?

IP-Bindung anpassen

Um den http.Client an eine bestimmte IP zu binden, ändern Sie sein Transportfeld mit einer Instanz von net.Transport. Dadurch können Sie den net.Dialer festlegen, um die lokale Adresse für Verbindungen zu steuern.

Codebeispiel

Der folgende Codeausschnitt zeigt, wie der Client an eine bestimmte Adresse gebunden wird lokale IP-Adresse:

import (
    "net"
    "net/http"
    "net/http/httputil"
    "time"
)

func main() {
    // Resolve the local IP address
    localAddr, err := net.ResolveIPAddr("ip", "")
    if err != nil {
        panic(err)
    }

    // Create a TCPAddr instance to specify the local address without specifying a port
    localTCPAddr := net.TCPAddr{
        IP: localAddr.IP,
    }

    // Create an HTTP client with a custom transport that specifies the local address
    webclient := &http.Client{
        Transport: &http.Transport{
            Proxy:                 http.ProxyFromEnvironment,
            DialContext:          (&net.Dialer{
                LocalAddr:      &localTCPAddr,
                Timeout:       30 * time.Second,
                KeepAlive:     30 * time.Second,
                DualStack:     true,
            }).DialContext,
            MaxIdleConns:          100,
            IdleConnTimeout:       90 * time.Second,
            TLSHandshakeTimeout:   10 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
        },
    }

    // Execute an HTTP request using the customized client
    req, _ := http.NewRequest("GET", "http://www.google.com", nil)
    resp, _ := webclient.Do(req)
    defer resp.Body.Close()
    
    // Optionally, use httputil to get the status code and response body
    code, _ := httputil.DumpResponse(resp, true)
    fmt.Println(code)
}

Mit diesem Ansatz können Sie die IP-Adresse angeben, die von den Verbindungen des HTTP-Clients verwendet wird. Dadurch können Sie die ausgehende IP steuern und so die Netzwerkflexibilität erhöhen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3