使用带有特定本地地址的拨入GoLang
我需要能够选择从哪个IP地址发送HTTP请求。在我现在的代码中,对于DNS缓存,我根据以下内容使用: 为了指定本地地址,我找到的唯一方法是使用以下命令:使用带有特定本地地址的拨入GoLang,go,Go,我需要能够选择从哪个IP地址发送HTTP请求。在我现在的代码中,对于DNS缓存,我根据以下内容使用: 为了指定本地地址,我找到的唯一方法是使用以下命令: defaultTransport.DialContext = (&net.Dialer{ LocalAddr: localAddr, }).DialContext 如何实现上述功能的结合?您可以包装您想要使用的本地地址拨号器,并将实际呼叫委托给它 localAddrDialier := &net.Dialer{
defaultTransport.DialContext = (&net.Dialer{
LocalAddr: localAddr,
}).DialContext
如何实现上述功能的结合?您可以包装您想要使用的本地地址拨号器,并将实际呼叫委托给它
localAddrDialier := &net.Dialer{
LocalAddr: localAddr,
}
// trimmed...
defaultTransport.DialContext = func(ctx context.Context, network string, addr string) (conn net.Conn, err error) {
separator := strings.LastIndex(addr, ":")
ips, err := r.LookupHost(ctx, addr[:separator])
if err != nil {
return nil, err
}
for _, ip := range ips {
// use the localAddrDialer here for the _actual_ request?
conn, err = localAddrDialer.DialContext(ctx, network, ip+addr[separator:])
if err == nil {
break
}
}
return
}
或者反之亦然,根据这一点,如果
net.Dialer
您想要进行实际呼叫您可以创建自己的拨号器,该拨号器将使用Golang的net package使用您的特定本地地址,如下所示:
dialer = &net.Dialer{
LocalAddr: &net.TCPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 0,
},
}
conn, err := dialer.Dial("tcp", "127.0.0.1:2525")
您也可以指定您的特定端口。但使用端口0意味着它将使用任何动态端口值来连接到另一台服务器
dialer = &net.Dialer{
LocalAddr: &net.TCPAddr{
IP: net.ParseIP("127.0.0.1"),
Port: 0,
},
}
conn, err := dialer.Dial("tcp", "127.0.0.1:2525")