Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah cara saya mengekang alamat IP klien HTTP Go apabila berbilang NIC hadir?

Bagaimanakah cara saya mengekang alamat IP klien HTTP Go apabila berbilang NIC hadir?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-02 19:55:02337semak imbas

How do I constrain the IP address of Go's HTTP client when multiple NICs are present?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn