Bagaimana Memaksa Pelanggan net/http untuk Menggunakan IPv4/IPv6 di Golang?

Linda Hamilton
Lepaskan: 2024-11-01 00:46:28
asal
828 orang telah melayarinya

How to Force net/http Client to Use IPv4/IPv6 in Golang?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!