"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 puis-je lier un client HTTP Go à une adresse IP spécifique ?

Comment puis-je lier un client HTTP Go à une adresse IP spécifique ?

Publié le 2024-11-10
Parcourir:868

How Can I Bind a Go HTTP Client to a Specific IP Address?

Liaison d'un client http.à une adresse IP dans Go

Dans le domaine de l'informatique distribuée, il est souvent nécessaire de contrôler l'adresse IP source adresse d'où proviennent les requêtes HTTP. Avec plusieurs cartes réseau sur un ordinateur client, cette granularité peut être essentielle.

Considérez le code client HTTP de base suivant :

package main

import "net/http"

func main() {
    webclient := &http.Client{}
    req, _ := http.NewRequest("GET", "http://www.google.com", nil)
    httpResponse, _ := webclient.Do(req)
    defer httpResponse.Body.Close()
}

Pour lier ce client à une carte réseau ou une adresse IP spécifique, nous devons modifier son champ Transport. Nous utiliserons un net.Transport personnalisé qui utilise un net.Dialer personnalisé. Le net.Dialer, à son tour, nous permet de spécifier l'adresse locale pour les connexions sortantes.

import (
    "net"
    "net/http"
)

func main() {
    localAddr, err := net.ResolveIPAddr("ip", "")
    if err != nil {
        panic(err)
    }
    localTCPAddr := net.TCPAddr{
        IP: localAddr.IP,
    }

    webclient := &http.Client{
        Transport: &http.Transport{
            Proxy:                http.ProxyFromEnvironment,
            DialContext:          (&net.Dialer{LocalAddr: &localTCPAddr}).DialContext,
            MaxIdleConns:          100,
            IdleConnTimeout:       90 * time.Second,
            TLSHandshakeTimeout:   10 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
        },
    }
}

Avec cette modification, notre client HTTP est désormais lié à l'adresse IP spécifiée, garantissant que toutes les requêtes sortantes proviennent de la carte réseau souhaitée.

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