ホームページ  >  記事  >  バックエンド開発  >  Golang で net/http クライアントに IPv4/IPv6 を使用させるにはどうすればよいですか?

Golang で net/http クライアントに IPv4/IPv6 を使用させるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 00:46:28812ブラウズ

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

Golang で net/http クライアントに IPv4/IPv6 を使用させる方法

Golang では、net/http ライブラリは柔軟なトランスポートを提供しますHTTP リクエストの作成方法を制御するレイヤー。一般的な要件の 1 つは、発信接続に IPv4 または IPv6 の使用を強制することです。これは、ドメインの到達可能性を特定のプロトコルでテストする必要があるシナリオで特に役立ちます。

これを実現するには、カスタム DialContext 関数を指定して、基盤となる HTTP トランスポートを変更できます。この機能を使用すると、接続確立プロセスを傍受し、場合によっては変更することができます。その方法は次のとおりです。

<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>

この例では、変更されたトランスポート内にカスタム DialContext 関数を作成します。接続の試行が開始されると、この関数が呼び出され、使用されているネットワーク タイプをインターセプトします。ネットワークが IPv4 (ネットワーク パラメーターの値として「ipv4」で示される) の場合は、IPv4 経由で接続が確立されないようにエラーを返すなど、適切なアクションを指定できます。これにより、リクエストに IPv6 の使用を強制できます。

カスタム トランスポートとその変更された DialContext 関数を利用することで、HTTP リクエストが IPv4 経由で行われるか IPv6 経由で行われるかを効果的に制御でき、管理の柔軟性が向上します。ネットワーク接続。

以上がGolang で net/http クライアントに IPv4/IPv6 を使用させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。