可以自定义 TLSClientConfig 的 ServerName 字段,并使用自定义的 DialContext 函数来控制连接到指定 IP
代码如下
func main() {
// 定义目标站点的域名和IP地址
domain := "www.baidu.com"
ip := "183.2.172.42" // 该 IP 地址对应 baidu.com
// 创建自定义的HTTP客户端
client := &http.Client{
Timeout: 5 * time.Second,
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
ServerName: domain, // 设置服务器名
},
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
// 目标地址是指定的IP,使用自定义Dialer连接
return (&net.Dialer{
Timeout: 5 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext(ctx, "tcp", ip+":443")
},
TLSHandshakeTimeout: 5 * time.Second,
},
}
// 发送HTTPS请求
resp, err := client.Get("https://" + domain + "/")
if err != nil {
fmt.Printf("无法连接到 %s: %v\n", domain, err)
return
}
defer resp.Body.Close()
// 读取响应内容
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Printf("无法读取响应: %v\n", err)
return
}
// 输出响应内容
fmt.Println("响应内容:", string(body))
}