首頁 >後端開發 >Golang >如何將Go HTTP客戶端綁定到特定IP位址?

如何將Go HTTP客戶端綁定到特定IP位址?

Patricia Arquette
Patricia Arquette原創
2024-10-29 12:24:29930瀏覽

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

Go 中將http.Client 綁定到IP 位址

在分散式運算領域,經常需要控制來源IP HTTP 請求的地址。對於客戶端電腦上有多個 NIC,這種粒度至關重要。

考慮以下基本 HTTP 用戶端程式碼:

<code class="go">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()
}</code>

要將此客戶端綁定到特定 NIC 或 IP 位址,我們需要修改其Transport欄位。我們將使用使用自訂 net.Dialer 的自訂 net.Transport。反過來,net.Dialer 允許我們指定傳出連線的本機位址。

<code class="go">import (
    "net"
    "net/http"
)

func main() {
    localAddr, err := net.ResolveIPAddr("ip", "<my local address>")
    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,
        },
    }
}</code>

透過此修改,我們的 HTTP 用戶端現在綁定到指定的 IP 位址,確保所有傳出請求均源自所需的 NIC。

以上是如何將Go HTTP客戶端綁定到特定IP位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn