Go の net/http クライアントで IPv4 または IPv6 を強制する
Go では、net/http パッケージはリクエストを行うための多用途の HTTP クライアントを提供します。 。 Transport フィールドを通じてクライアントの動作を柔軟にカスタマイズできます。この記事では、接続を確立するときにクライアントに IPv4 または IPv6 のいずれかを強制的に使用する方法について説明します。
IPv6 専用ドメインの検出
ドメインが IPv6 かどうかを確認するには、- Control メソッドに渡されるネットワーク パラメーターをチェックするカスタム DialContext 関数を作成することのみが可能です。ネットワークが「tcp4」の場合、これは IPv4 のみの接続を示しており、接続をキャンセルできます。
<code class="go">func ModifiedTransport() { var MyTransport = &http.Transport{ DialContext: (&net.Dialer{ DualStack: false, Control: func(network, address string, c syscall.RawConn) error { if network == "tcp4" { return errors.New("you should not use ipv4") } return nil }, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, } var myClient = http.Client{Transport: MyTransport} resp, myerr := myClient.Get("http://www.github.com") if myerr != nil { fmt.Println("request error") return } }</code>
IPv6 接続の強制
IPv6 接続では、Control 関数のネットワーク パラメーターとして「tcp6」を指定できます。
<code class="go">func ModifiedTransport() { var MyTransport = &http.Transport{ DialContext: (&net.Dialer{ DualStack: false, Control: func(network, address string, c syscall.RawConn) error { if network != "tcp6" { return errors.New("you should use ipv6") } return nil }, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, } var myClient = http.Client{Transport: MyTransport} }</code>
Control 関数でネットワーク パラメーターを制御することで、必要に応じて IPv4 または IPv6 接続を強制できます。このアプローチにより、特定のネットワーク要件に合わせて Go の net/http クライアントの動作を柔軟にカスタマイズできます。
以上がGo の net/http クライアントで IPv4 または IPv6 接続を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。