Golang使用自定义IP请求https

可以自定义 TLSClientConfig 的 ServerName 字段,并使用自定义的 DialContext 函数来控制连接到指定 IP

代码如下

go 复制代码
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))
}
相关推荐
小时前端3 天前
HTTPS 页面加载 HTTP 脚本被拦?同源代理来救场
前端·https
花酒锄作田7 天前
Gin 框架中的规范响应格式设计与实现
golang·gin
qwfys2008 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
赤月奇8 天前
https改为http
数据挖掘·https·ssl
codeejun8 天前
每日一Go-25、Go语言进阶:深入并发模式1
开发语言·后端·golang
石牌桥网管8 天前
Go 泛型(Generics)
服务器·开发语言·golang
小二·8 天前
Go 语言系统编程与云原生开发实战(第21篇)
开发语言·云原生·golang
小二·8 天前
Go 语言系统编程与云原生开发实战(第20篇)
开发语言·云原生·golang
女王大人万岁8 天前
Golang实战Eclipse Paho MQTT库:MQTT通信全解析
服务器·开发语言·后端·golang
codeejun8 天前
每日一Go-24、Go语言实战-综合项目:规划与搭建
开发语言·后端·golang