Golang指定http请求的ip地址

在写hunshcn/qndxx的时候,项目部署在 vercel,h5.cyol.com 在海外解析到了 103.42.78.169,但是 vercel 是无法访问这个 ip 的……所以需要手动给它制定一下目标 ip。

如果是在 python 里,直接 requests https://1.1.1.1,然后在 header 加上 host 就可以了。但是 golang 这样会出现证书错误。

在 Golang 里我们定义一个Transport,然后修改请求的 endpoint。

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
   dialer := &net.Dialer{
Timeout: 6 * time.Second,
KeepAlive: 3 * time.Second,
}

transport := http.Transport{
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
if addr == "h5.cyol.com:80" {
addr = "218.1.70.80:80"
}
return dialer.DialContext(ctx, network, addr)
}}
client = http.Client{Transport: &transport}

我们可以基于此进行类似于 dns 的操作,或者实现简单的负载均衡。


Golang指定http请求的ip地址
https://hunsh.net/archives/113/
发布于
2021年3月25日
许可协议