Go で http.Client を IP アドレスにバインドする
分散コンピューティングの領域では、多くの場合、ソース IP を制御する必要があります。 HTTP リクエストの発信元のアドレス。クライアント マシン上に複数の NIC がある場合、この粒度は重要になります。
次の基本的な HTTP クライアント コードを考えてみましょう:
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()
}
このクライアントを特定の NIC または IP アドレスにバインドするには、その Transport フィールドを変更する必要があります。カスタム net.Dialer を使用するカスタム net.Transport を使用します。 net.Dialer を使用すると、発信接続用のローカル アドレスを指定できるようになります。
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,
},
}
}
この変更により、HTTP クライアントは指定された IP アドレスにバインドされ、すべての送信リクエストが目的の NIC から発信されることが保証されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3