So beschränken Sie die IP-Adresse des HTTP-Clients
Der http.Client von Go ermöglicht effiziente HTTP-Anfragen, aber wie können Sie seine IP-Adresse einschränken, wenn Ihre System beherbergt mehrere NICs?
IP-Bindung anpassen
Um den http.Client an eine bestimmte IP zu binden, ändern Sie sein Transportfeld mit einer Instanz von net.Transport. Dadurch können Sie den net.Dialer festlegen, um die lokale Adresse für Verbindungen zu steuern.
Codebeispiel
Der folgende Codeausschnitt zeigt, wie der Client an eine bestimmte Adresse gebunden wird lokale IP-Adresse:
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)
}
Mit diesem Ansatz können Sie die IP-Adresse angeben, die von den Verbindungen des HTTP-Clients verwendet wird. Dadurch können Sie die ausgehende IP steuern und so die Netzwerkflexibilität erhöhen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3