8

我正在使用Charles调试 HTTP 请求,但似乎 Go 的网络堆栈忽略了系统代理设置(在 OSX 上)并且没有记录请求。

我如何告诉 Go 请求应该使用代理?

4

2 回答 2

7

我刚刚遇到了这个确切的问题,而接受的解决方案并没有为我解决。那是因为我的$HTTP_PROXY环境变量没有设置!

我可以通过设置我的环境变量来解决它,如下所示:http: //www.bonusbits.com/wiki/HowTo :Setup_Charles_Proxy_on_Mac然后,一旦变量设置正确,我什至不需要应用自定义Transport给我的客户。它适用于默认传输。

也许是因为我使用的是自定义 shell (zsh),这并没有自动发生。然而有趣的是,python 会正确地出现在同一个 shell 中的 Charles Proxy 中,而 Go 不会。更新我的 .zshrc(或您正在使用的任何 shell 或配置文件的配置)以导出适当的变量。

于 2015-12-15T17:09:30.143 回答
4

您可以使用ProxyFromEnvironment函数获取代理信息。然后,您使用传输(由 RoundTripper 接口表示)创建 http 客户端,其中包含有关您的代理设置的信息:

var PTransport http.RoundTripper = &http.Transport{Proxy: http.ProxyFromEnvironment}

client := http.Client{Transport: PTransport}

然后,您只需使用从传递函数到Proxy结构字段的信息传输获取 http 请求。代理信息将从$HTTP_PROXY环境变量中获取。

于 2013-08-12T13:38:47.937 回答