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 サイトの他の関連記事を参照してください。