Python3 googleads.oauth2模块不使用代理。蟒蛇2
我有以下Python代码片段,可以连接到Google Doubleclick for Publisher。它在Python2和Python3中工作良好。但是,当使用(Squid)代理时,它不适用于Python3,因为在使用Python3 googleads库时,对accounts.google.com的调用会绕过代理 所以我的问题是,为什么对accounts.google.com的调用会绕过代理 我不会直接打电话到accounts.google.com,这是由谷歌谷歌图书馆完成的<代码>pip安装googleads 我怀疑googleads.oauth2模块就是罪魁祸首。这是一段代码片段: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
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