ホームページ  >  記事  >  バックエンド開発  >  Go で HTTP クライアントを特定の IP アドレスにバインドするにはどうすればよいですか?

Go で HTTP クライアントを特定の IP アドレスにバインドするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 13:33:30641ブラウズ

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

Go で http.Client を IP アドレスにバインドする

Go では、デフォルトで、HTTP リクエストは特定の IP アドレスまたはネットワーク インターフェイス カードにバインドされません ( NIC)。これは、複数の NIC があり、送信 HTTP リクエストにどれを使用するかを指定する必要がある場合に問題になる可能性があります。

これを解決するには、http.Client 構造体の Transport フィールドを変更します。これを net.Transport のインスタンスに設定すると、net.Dialer の DialContext メソッドにアクセスできるようになり、デフォルトのローカル アドレスをオーバーライドできるようになります。

http をバインドする方法を示す例を次に示します。特定の IP アドレスへのクライアント:

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

このアプローチを使用すると、変更された http.Client を使用して行われた HTTP リクエストが特定の IP アドレスから発信されるようにすることができます。

以上がGo で HTTP クライアントを特定の IP アドレスにバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。