在 Go HTTP 客户端中强制使用 IPv4/IPv6
在 Go 中,http.Client 为处理网络连接的 HTTP 请求提供传输。要强制客户端仅使用 IPv4 或 IPv6,请在自定义传输实现中利用 DialContext 函数。
修改后的传输代码段旨在通过返回错误来检测仅限 IPv6 的域当尝试建立 IPv4 连接时。
<code class="go">type MyTransport struct { http.Transport Dialer net.Dialer } func (t *MyTransport) DialContext(ctx context.Context, network, address string) (net.Conn, error) { if network == "ipv4" { return nil, errors.New("IPv4 not permitted") } return t.Dialer.DialContext(ctx, network, address) }</code>
要使用自定义传输,请实例化 http.Client 对象:
<code class="go">myClient := http.Client{ Transport: &MyTransport{ Dialer: net.Dialer{ DualStack: false, // Disable IPv4/IPv6 dual-stack }, }, }</code>
通过将 DualStack 设置为 false,拨号器将不允许 IPv4 连接。此修改有效地强制客户端使用仅 IPv6 连接。
使用修改后的传输建立的连接的行为与常规连接相同。关闭它们是由底层 HTTP 客户端管理的,因此无需手动处理。
以上是如何在 Go HTTP 客户端中强制使用 IPv4 或 IPv6?的详细内容。更多信息请关注PHP中文网其他相关文章!