在 GO 中使用带有 net/http 的代理

Posted

技术标签:

【中文标题】在 GO 中使用带有 net/http 的代理【英文标题】:Using proxies with net/http in GO 【发布时间】:2021-12-29 09:47:53 【问题描述】:

我正在尝试将代理与 net/http 包一起使用。我的代理是具有用户名、密码、代理地址和端口的轮换代理。 我尝试使用os.setEnv() 将其设置为环境变量,并将其添加到我的 Windows 10 环境变量中,但结果可能是 Windows 不支持用户通过身份验证的代理。 我也尝试了http传输方法,但无法让它工作

func SetProxy() *http.Client 
    cfg := GetConfig()
    if cfg.UseProxy 
        proxyUrl, err := url.Parse("http://" + cfg.Proxy)
        if err != nil 
            panic(err)
        
        myClient := &http.ClientTransport: &http.TransportProxy: http.ProxyURL(proxyUrl)
        return myClient
    
    return &http.Client

如果有人可以向我指出一个教程或一些文档来使用代理,特别是代理与用户密码身份验证!

注意:我到处都使用这种格式:username:password@proxyaddress:port

【问题讨论】:

代码对我来说看起来不错。运行代码时观察到什么?您是否尝试通过打印 cfg 变量来调试代码? 是的,我尝试通过打印代理来调试它。因此,如果我输入了错误的代理,我的程序会在没有错误的情况下崩溃,所以我知道它确实以某种方式使用了它。如果我输入了正确的代理,程序会按预期工作,但除了检查代理上留下的数据外,我无法知道它是否正在使用代理。即使在运行数千个请求时,代理上的数据似乎也没有移动。 请尝试打印client.Transport.Proxy函数;如果它不为零,请调用它。如果 Proxy 不是 nil 并且返回不是 nil *URL,则使用代理。 这很聪明,我会试试这个!谢谢 【参考方案1】:

作为调试尝试,您可以打印client.Transport.Proxy 函数;如果它不为零,则调用它并打印它返回的内容。如果Proxy 不是nil 并且返回不是nil *URL,则使用代理。

【讨论】:

是的!代理工作正常,我的电脑出了点问题!非常感谢 @PhysicsPanda,如果您认为它有帮助,您可以接受答案:)

以上是关于在 GO 中使用带有 net/http 的代理的主要内容,如果未能解决你的问题,请参考以下文章

go ghttp 配置代理 配置header

golang http proxy反向代理

使用 golang 1.10.2 连接到带有 IKEv2 证书的 socks5 代理

golang如何创建反向代理

pkill有的时候并不能杀死进程?

在Go中使用反向代理进行网络钓鱼测试