Go の net/http クライアントで IPv4 または IPv6 接続を強制するにはどうすればよいですか?
Oct 31, 2024 pm 08:48 PMGo の net/http クライアントで IPv4 または IPv6 を強制する
Go では、net/http パッケージはリクエストを行うための多用途の HTTP クライアントを提供します。 。 Transport フィールドを通じてクライアントの動作を柔軟にカスタマイズできます。この記事では、接続を確立するときにクライアントに IPv4 または IPv6 のいずれかを強制的に使用する方法について説明します。
IPv6 専用ドメインの検出
ドメインが IPv6 かどうかを確認するには、- Control メソッドに渡されるネットワーク パラメーターをチェックするカスタム DialContext 関数を作成することのみが可能です。ネットワークが「tcp4」の場合、これは IPv4 のみの接続を示しており、接続をキャンセルできます。
<code class="go">func ModifiedTransport() { var MyTransport = &amp;http.Transport{ DialContext: (&amp;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 = &amp;http.Transport{ DialContext: (&amp;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 サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?
