【发布时间】: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.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
return myClient
}
return &http.Client{}
}
如果有人可以向我指出一个教程或一些文档来使用代理,特别是代理与用户密码身份验证!
注意:我到处都使用这种格式:username:password@proxyaddress:port
【问题讨论】:
-
代码对我来说看起来不错。运行代码时观察到什么?您是否尝试通过打印 cfg 变量来调试代码?
-
是的,我尝试通过打印代理来调试它。因此,如果我输入了错误的代理,我的程序会在没有错误的情况下崩溃,所以我知道它确实以某种方式使用了它。如果我输入了正确的代理,程序会按预期工作,但除了检查代理上留下的数据外,我无法知道它是否正在使用代理。即使在运行数千个请求时,代理上的数据似乎也没有移动。
-
请尝试打印client.Transport.Proxy函数;如果它不为零,请调用它。如果 Proxy 不是 nil 并且返回不是 nil *URL,则使用代理。
-
这很聪明,我会试试这个!谢谢