Maison >développement back-end >Golang >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 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 19:55:02417parcourir

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 http.Client 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 http.Client à une 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 :

<code class="go">import (
    "net"
    "net/http"
    "net/http/httputil"
    "time"
)

func main() {
    // Resolve the local IP address
    localAddr, err := net.ResolveIPAddr("ip", "<my local address>")
    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)
}</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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn