net / http忽略系统代理设置

时间:2013-08-12 12:34:31

标签: go

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

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

2 个答案:

答案 0 :(得分:3)

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

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

client := http.Client{Transport: PTransport}

然后你只需要使用info传输获取http请求从传递函数到Proxy struct字段。代理信息将来自$HTTP_PROXY环境变量。

答案 1 :(得分:3)

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

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

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