Cara Memaksa Pelanggan net/http untuk Menggunakan IPv4/IPv6 di Golang
Di Golang, perpustakaan net/http menyediakan pengangkutan yang fleksibel lapisan yang mengawal cara permintaan HTTP dibuat. Satu keperluan biasa adalah untuk menguatkuasakan penggunaan sama ada IPv4 atau IPv6 untuk sambungan keluar. Ini amat berguna untuk senario di mana kebolehcapaian domain perlu diuji secara khusus pada satu protokol atau yang lain.
Untuk mencapai ini, anda boleh mengubah suai pengangkutan HTTP asas dengan menentukan fungsi DialContext tersuai. Fungsi ini membolehkan anda memintas dan berpotensi mengubah proses penubuhan sambungan. Begini cara anda boleh melakukannya:
<code class="go">import ( "errors" "fmt" "net" "net/http" "syscall" "time" ) func modifiedTransport() { var myTransport = &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, DualStack: false, Control: func(network, address string, c syscall.RawConn) error { if network == "ipv4" { // Here you can return an error to prevent connection establishment over IPv4. return errors.New("ipv4 connections are not allowed") } return nil }, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, } var myClient = http.Client{Transport: myTransport} resp, err := myClient.Get("http://www.github.com") if err != nil { fmt.Println("Request error:", err) return } var buffer = make([]byte, 1000) resp.Body.Read(buffer) fmt.Println(string(buffer)) }</code>
Dalam contoh ini, kami mencipta fungsi DialContext tersuai dalam pengangkutan yang diubah suai. Apabila percubaan sambungan dimulakan, fungsi ini akan digunakan, dan ia memintas jenis rangkaian yang sedang digunakan. Jika rangkaian ialah IPv4 (ditunjukkan oleh "ipv4" sebagai nilai parameter rangkaian), anda boleh menentukan tindakan yang sesuai, seperti mengembalikan ralat untuk menghalang sambungan daripada diwujudkan melalui IPv4. Ini membolehkan anda menguatkuasakan penggunaan IPv6 untuk permintaan tersebut.
Dengan menggunakan pengangkutan tersuai dan fungsi DialContextnya yang diubah suai, anda boleh mengawal dengan berkesan sama ada permintaan HTTP anda dibuat melalui IPv4 atau IPv6, memberikan lebih fleksibiliti dalam mengurus sambungan rangkaian.
Atas ialah kandungan terperinci Bagaimana Memaksa Pelanggan net/http untuk Menggunakan IPv4/IPv6 di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!