Vincular un cliente http.a una dirección IP en Go
En el ámbito de la informática distribuida, a menudo es necesario controlar la IP de origen Dirección desde la que se originan las solicitudes HTTP. Con varias NIC en una máquina cliente, esta granularidad puede ser esencial.
Considere el siguiente código de cliente HTTP básico:
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()
}
Para vincular este cliente a una NIC o dirección IP específica, debemos modificar su campo Transporte. Usaremos un net.Transport personalizado que emplea un net.Dialer personalizado. El net.Dialer, a su vez, nos permite especificar la dirección local para las conexiones salientes.
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,
},
}
}
Con esta modificación, nuestro cliente HTTP ahora está vinculado a la dirección IP especificada, lo que garantiza que todas las solicitudes salientes se originen desde la NIC deseada.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3