在 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 的代理的主要内容,如果未能解决你的问题,请参考以下文章