"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso vincular um cliente Go HTTP a um endereço IP específico?

Como posso vincular um cliente Go HTTP a um endereço IP específico?

Publicado em 2024-11-10
Navegar:643

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

Vinculando um http.Client a um endereço IP no Go

No domínio da computação distribuída, muitas vezes é necessário controlar o IP de origem endereço de origem das solicitações HTTP. Com vários NICs em uma máquina cliente, essa granularidade pode ser essencial.

Considere o seguinte 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 uma NIC ou endereço IP específico, precisamos modificar seu campo Transport. Usaremos um net.Transport personalizado que emprega um net.Dialer personalizado. O net.Dialer, por sua vez, nos permite especificar o endereço local para conexões de saída.

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,
        },
    }
}

Com esta modificação, nosso cliente HTTP agora está vinculado ao endereço IP especificado, garantindo que todas as solicitações de saída sejam originadas da NIC desejada.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3