我正在使用Charles调试 HTTP 请求,但似乎 Go 的网络堆栈忽略了系统代理设置(在 OSX 上)并且没有记录请求。
我如何告诉 Go 请求应该使用代理?
我刚刚遇到了这个确切的问题,而接受的解决方案并没有为我解决。那是因为我的$HTTP_PROXY
环境变量没有设置!
我可以通过设置我的环境变量来解决它,如下所示:http: //www.bonusbits.com/wiki/HowTo :Setup_Charles_Proxy_on_Mac然后,一旦变量设置正确,我什至不需要应用自定义Transport
给我的客户。它适用于默认传输。
也许是因为我使用的是自定义 shell (zsh),这并没有自动发生。然而有趣的是,python 会正确地出现在同一个 shell 中的 Charles Proxy 中,而 Go 不会。更新我的 .zshrc(或您正在使用的任何 shell 或配置文件的配置)以导出适当的变量。
您可以使用ProxyFromEnvironment函数获取代理信息。然后,您使用传输(由 RoundTripper 接口表示)创建 http 客户端,其中包含有关您的代理设置的信息:
var PTransport http.RoundTripper = &http.Transport{Proxy: http.ProxyFromEnvironment}
client := http.Client{Transport: PTransport}
然后,您只需使用从传递函数到Proxy
结构字段的信息传输获取 http 请求。代理信息将从$HTTP_PROXY
环境变量中获取。