Lier un http.Client à 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 une machine client, cette granularité peut être essentielle.
Considérez le code client HTTP de base suivant :
<code class="go">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() }</code>
Pour lier ce client à une carte réseau ou une adresse IP spécifique, nous besoin de 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.
<code class="go">import ( "net" "net/http" ) func main() { localAddr, err := net.ResolveIPAddr("ip", "<my local address>") 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, }, } }</code>
Avec cette modification, notre client HTTP est désormais lié à l'adresse IP spécifiée, garantissant que toutes les requêtes sortantes proviennent à partir de la carte réseau souhaitée.
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!