【问题标题】:Google Analytics API + proxy谷歌分析 API + 代理
【发布时间】:2016-04-18 07:26:39
【问题描述】:

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

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]

【问题讨论】:

  • 您是否验证过代理可以与其他 URL/请求一起使用?
  • 确实如此。一个简单的httplib2.Http(proxy_info=p).request('google.com')
  • 也不起作用。虽然请求包有效!但我需要使用 httplib2.Http() 来适应谷歌服务对象

标签: python proxy google-analytics-api google-api-python-client


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我刚刚遇到这个问题,它与我在 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))
    

    此方法也适用于对授权/发现 URL 的初始请求,但如果您需要从 API 请求信息,则稍后会失败。在我找到一个更简单的解决方案(上图)之前,我在上面挖掘了 google analytics 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))
    

    【讨论】:

      【解决方案3】:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-09
        • 1970-01-01
        • 2015-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-15
        相关资源
        最近更新 更多