"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment limiter l'adresse IP du client HTTP de Go lorsque plusieurs cartes réseau sont présentes ?

Comment limiter l'adresse IP du client HTTP de Go lorsque plusieurs cartes réseau sont présentes ?

Publié le 2024-11-08
Parcourir:810

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

Comment contraindre l'adresse IP du client HTTP

Le client http de Go permet des requêtes HTTP efficaces, mais comment restreindre son adresse IP si votre Le système héberge plusieurs cartes réseau ?

Personnalisation de la liaison IP

Pour lier le client http.Client à une adresse IP spécifique, modifiez son champ Transport avec une instance de net.Transport. Cela vous permet de désigner net.Dialer pour contrôler l'adresse locale pour les connexions.

Exemple de code

L'extrait de code ci-dessous montre comment lier le client à un utilisateur spécifié. adresse IP locale :

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

En utilisant cette approche, vous pouvez spécifier l'adresse IP utilisée par les connexions du client HTTP. Cela vous permet de contrôler l'adresse IP sortante pour une flexibilité réseau.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3