Google 分析 API + 代理

Google Analytics API + proxy

我构建了一个 Python 3.4 Web 应用程序调用 Google 分析 API。

class GA:

    def __init__(self):
        self.scope = ['https://www.googleapis.com/auth/analytics.readonly']
        self.service_account_email = 'my_account_email'
        self.key_file_location = 'my_key_location'
        self.ga_id = 'my_ga_id'


    def get_service(self, api_name = 'analytics', api_version = 'v3'):
        f = open(self.key_file_location, 'rb')
        key = f.read()
        f.close()
        credentials = SignedJwtAssertionCredentials(self.service_account_email, key,scope=self.scope)

        http = credentials.authorize(httplib2.Http())

        service = build(api_name, api_version, http=http)
        self.service = service
        return (service)

 ga = GA()
 ga.get_service()

完美运行无需代理

但我需要在企业代理 后面的windows 服务器运行 上进行设置。所以我尝试用 :

替换 http 对象
p = httplib2.proxy_info_from_url("http://username:pwd@myproxyname:80")
http = credentials.authorize(httplib2.Http(proxy_info=p))

但是没用。所以我也试过 :

os.environ['HTTP_PROXY']="http://username:pwd@myproxyname:80"
p = httplib2.proxy_info_from_environment(method='http')
http = credentials.authorize(httplib2.Http(proxy_info=p))

但它也不起作用。我检查了所有相关问题,但没有成功。我总是收到 TimeoutError: [WinError 10060]

对于那些感兴趣的人,我决定在 Python 2 中重新编写我的网络应用程序;仍在使用 httplib2 包;

相同的代码有效(考虑代理信息与 Python 3 相反)

我刚遇到这个问题,它与我在 Python 3.6 中实施的解决方案有关。

我尝试了多种不同的方法,但 httplib2 似乎唯一能识别代理的方法是通过修改 http_proxy 环境变量

我还必须删除 SSL 验证,因为这是我可以让它正常工作的唯一方法。我不推荐这种方法,除非您相信您请求的域不会受到损害。

os.environ["https_proxy"] = "https://PROXY_URL:PROXY_PORT"
http = credentials.authorize(http=httplib2.Http(disable_ssl_certificate_validation=True))

此方法也适用于 authorization/discovery URL 的初始请求,但如果您需要从 API 请求信息,则稍后会失败。在找到更简单的解决方案(上图)

之前,我在上面深入研究了 google 分析 api 源代码
# http = credentials.authorize(http=httplib2.Http(proxy_info=httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, "PROXY_URL", PROXY_PORT), disable_ssl_certificate_validation=True))

huberu,你的代码运行良好,帮了我大忙!
祝福你和你的家人!

如果有人需要测试,可以使用下面的代码模拟代理连接:

import httplib2
import os

os.environ['https_proxy'] = '127.0.0.1:80'
http = httplib2.Http(disable_ssl_certificate_validation=True)

resp, content = http.request('http://google.com', 'GET')
print(resp)
print(content)