Dans Go, par défaut, les requêtes HTTP ne se lient pas à une adresse IP spécifique ou à une carte d'interface réseau ( carte réseau). Cela peut être problématique si vous disposez de plusieurs cartes réseau et devez spécifier laquelle utiliser pour les requêtes HTTP sortantes.
Pour résoudre ce problème, vous pouvez modifier le champ Transport de la structure http.Client. En le définissant sur une instance de net.Transport, vous accédez à la méthode DialContext de net.Dialer, qui vous permet de remplacer l'adresse locale par défaut.
Voici un exemple qui montre comment lier un http. Client vers une adresse IP spécifique :
<code class="go">import ( "net" "net/http" "time" ) func main() { // Parse the local IP address you want to use localAddr, err := net.ResolveIPAddr("ip", "<my local address>") if err != nil { panic(err) } // Create a TCPAddr from the IP address localTCPAddr := net.TCPAddr{ IP: localAddr.IP, } // Initialize an http.Client with a custom DialContext 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, }, } // Make an HTTP request req, _ := http.NewRequest("GET", "http://www.google.com", nil) httpResponse, _ := webclient.Do(req) defer httpResponse.Body.Close() }</code>
En utilisant cette approche, vous pouvez vous assurer que les requêtes HTTP effectuées à l'aide du http.Client modifié proviendront d'une adresse IP spécifique.
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!