Python3 googleads.oauth2模块不使用代理。蟒蛇2

Python3 googleads.oauth2模块不使用代理。蟒蛇2,python,oauth,double-click,squid,Python,Oauth,Double Click,Squid,我有以下Python代码片段,可以连接到Google Doubleclick for Publisher。它在Python2和Python3中工作良好。但是,当使用(Squid)代理时,它不适用于Python3,因为在使用Python3 googleads库时,对accounts.google.com的调用会绕过代理 所以我的问题是,为什么对accounts.google.com的调用会绕过代理 我不会直接打电话到accounts.google.com,这是由谷歌谷歌图书馆完成的pip安装goo

我有以下Python代码片段,可以连接到Google Doubleclick for Publisher。它在Python2和Python3中工作良好。但是,当使用(Squid)代理时,它不适用于Python3,因为在使用Python3 googleads库时,对accounts.google.com的调用会绕过代理

所以我的问题是,为什么对accounts.google.com的调用会绕过代理

我不会直接打电话到accounts.google.com,这是由谷歌谷歌图书馆完成的<代码>pip安装googleads

我怀疑googleads.oauth2模块就是罪魁祸首。这是一段代码片段:

from googleads import dfp
    from googleads import oauth2
    import httplib2

    oauth2_client = None
    try:

        proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, <proxy.host>,<proxy.port>)

        oauth2_client = (
            oauth2.GoogleRefreshTokenClient(<dfp.client_id>, <dfp.client_secret>,
                                            <dfp.refresh_token>, proxy_info=proxy_info
            )
        )
    except Exception as e:
        logger.critical("Could not init oauth client", e)

    httpsProxyUrl = "http://{}:{}".format(<proxy.host>,<proxy.port>


    self.dfp_client = dfp.DfpClient(oauth2_client, <dfp.application_name>,
                                    network_code=<dfp.network_code>,
                                    https_proxy=httpsProxyUrl, cache=None)
来自googleads导入dfp
从googleads导入oauth2
导入httplib2
oauth2_客户端=无
尝试:
proxy\u info=httplib2.ProxyInfo(socks.proxy\u TYPE\u HTTP,)
oauth2_客户端=(
oauth2.GoogleRefreshTokenClient(,
,proxy_info=proxy_info
)
)
例外情况除外,如e:
logger.critical(“无法初始化oauth客户端”,e)
httpsProxyUrl=“http://{}:{}”。格式(,
self.dfp_client=dfp.dfp客户端(oauth2_客户端,
网络编码=,
https_proxy=httpsProxyUrl,cache=None)
使用Python2运行时,Squid日志显示:

1454506480.333788::1 TCP_MISS/200 399986 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::8b- 1454506480.737 236::1 TCP_未命中/200 4767连接173.194.65.84:443-HIER_直接/173.194.65.84- 1454506487.1436399::1 TCP_MISS/200 900716 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::8b- 1454506492.123 1049::1 TCP_MISS/200 195254 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::8b- 1454506494.129 1928::1 TCP_MISS/200 7579 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::8b-

所有的ads.google.com连接都很好。还有一个连接到173.194.65.84,就是accounts.google.com,也很好……我想,因为我需要的是DNS名称,而不是IP地址。奇怪

使用Python3运行时,我的防火墙会注意到对account.google.com的访问。这不太好,因为它绕过了代理。到ads.google.com的流量仍然通过代理:

Squid日志显示ads.google.com正在访问。这很好,但accounts.google.com不见了:

1454507105.115 924::1 TCP_MISS/200 401298 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::64- 1454507114.449 6664::1 TCP_MISS/200 903366 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::64- 1454507118.952 612::1 TCP_MISS/200 196015 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::64- 1454507120.4111391::1 TCP_MISS/200 7909 CONNECT ads.google.com:443-HIER_DIRECT/2a00:1450:4013:c00::64-


不是googleads.oauth2模块是罪魁祸首。而是库。HTTPLib2似乎没有正确地获取代理设置,如许多地方所述,例如:

我通过代理HTTP和创建IP地址白名单来绕过代理解决了眼前的问题。我使用了这个替换

然后代码变成:

from googleads import dfp
from googleads import oauth2
import httplib2
import roaldsocks # socks rewrite

oauth2_client = None
try:
    roaldsocks.setdefaultproxy(roaldsocks.PROXY_TYPE_HTTP <proxy.host>,<proxy.port>)
    roaldsocks.wrapmodule(httplib2)

    oauth2_client = (
        oauth2.GoogleRefreshTokenClient(<dfp.client_id>, <dfp.client_secret>,<dfp.refresh_token>
        )
    )
except Exception as e:
    logger.critical("Could not init oauth client", e)

请注意,这只适用于ipv4。

不是googleads。oauth2模块是罪魁祸首。它是库。HTTPLib2似乎没有正确地获取代理设置,如许多地方所述,例如:

我通过代理HTTP和创建IP地址白名单来绕过代理解决了眼前的问题。我使用了这个替换

然后代码变成:

from googleads import dfp
from googleads import oauth2
import httplib2
import roaldsocks # socks rewrite

oauth2_client = None
try:
    roaldsocks.setdefaultproxy(roaldsocks.PROXY_TYPE_HTTP <proxy.host>,<proxy.port>)
    roaldsocks.wrapmodule(httplib2)

    oauth2_client = (
        oauth2.GoogleRefreshTokenClient(<dfp.client_id>, <dfp.client_secret>,<dfp.refresh_token>
        )
    )
except Exception as e:
    logger.critical("Could not init oauth client", e)
请注意,这只适用于ipv4