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)
我构建了一个 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)