问题:
使用 Go 1.11 的 net/ http 客户端,如何确定域是否仅支持 IPv6 并在需要时阻止其使用 IPv4?
解决方案:
强制使用 IPv4 或 IPv6 Go的net/http客户端,使用net.Dialer的Control选项修改其DialContext函数。此函数检查用于传出连接的网络类型。
将以下代码复制到您的主函数中:
<code class="go">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" { // Force cancellation of IPv4 connections 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 } var buffer = make([]byte, 1000) resp.Body.Read(buffer) fmt.Println(string(buffer)) }</code>
说明:
以上是如何在 Go 的 net/http 客户端中强制使用 IPv4/IPv6?的详细内容。更多信息请关注PHP中文网其他相关文章!