Cara Mengekang Alamat IP Pelanggan HTTP
Go's http.Client mendayakan permintaan HTTP yang cekap, tetapi bagaimana anda menyekat alamat IPnya jika anda sistem menempatkan berbilang NIC?
Menyesuaikan Pengikatan IP
Untuk mengikat http.Client ke IP tertentu, ubah suai medan Pengangkutannya dengan contoh net.Transport. Ini membolehkan anda menetapkan net.Dialer untuk mengawal alamat setempat untuk sambungan.
Contoh Kod
Coretan kod di bawah menunjukkan cara mengikat klien kepada yang ditentukan alamat IP tempatan:
<code class="go">import ( "net" "net/http" "net/http/httputil" "time" ) func main() { // Resolve the local IP address localAddr, err := net.ResolveIPAddr("ip", "<my local address>") if err != nil { panic(err) } // Create a TCPAddr instance to specify the local address without specifying a port localTCPAddr := net.TCPAddr{ IP: localAddr.IP, } // Create an HTTP client with a custom transport that specifies the local address 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, }, } // Execute an HTTP request using the customized client req, _ := http.NewRequest("GET", "http://www.google.com", nil) resp, _ := webclient.Do(req) defer resp.Body.Close() // Optionally, use httputil to get the status code and response body code, _ := httputil.DumpResponse(resp, true) fmt.Println(code) }</code>
Dengan menggunakan pendekatan ini, anda boleh menentukan alamat IP yang digunakan oleh sambungan klien HTTP. Ini membolehkan anda mengawal IP keluar untuk fleksibiliti rangkaian.
Atas ialah kandungan terperinci Bagaimanakah cara saya mengekang alamat IP klien HTTP Go apabila berbilang NIC hadir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!