Golang指定http请求的ip地址

in Golang with 0 comment

在写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。
代码如下

        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的操作,或者实现简单的负载均衡。

Responses