Google API + proxy + httplib2

孤人 提交于 2019-12-22 05:25:28

问题


I'm currently running a script to pull data from Google Analytics with googleapiclient Phyton package (that is based on httplib2 client object)

--> My script works perfectly without any proxy.

But I have to put it behind my corporate proxy, so I need to adapt my httplib2.Http() object to embed proxy information.

Following httplib2 doc1 I tried:

pi = httplib2.proxy_info_from_url('http://user:pwd@someproxy:80')
httplib2.Http(proxy_info=pi).request("http://www.google.com")

But it did not work. I always get a Time out error, with or without the proxy info (so proxy_info in parameter is not taken into account)

I also downloaded socks in pysocks package (v1.5.6) and tried to "wrapmodule" httplib2 as described in here: https://github.com/jcgregorio/httplib2/issues/205

socks.setdefaultproxy(socks.PROXY_TYPE_HTTP, "proxyna", port=80, username='p.tisserand', password='Telematics12')
socks.wrapmodule(httplib2)
h = httplib2.Http()
h.request("http://google.com")

But I get a IndexError: (tuple index out of range)

In the meantime, When I use the requests package, this simple code works perfectly:

os.environ["HTTP_PROXY"] = "http://user:pwd@someproxy:80"
req = requests.get("http://www.google.com")

The problem is that need to fit with googleapiclient requirements and provide a htpplib2.Http() client object.


回答1:


rather than using Python2, I think you'd better try using httplib2shim

You can have a look at this tutorial on my blog : https://dinatam.com/fr/python-3-google-api-proxy/

In simple words, just replace this kind of code :

from httplib2 import Http
http_auth = credentials.authorize(Http())

by this one :

import httplib2shim
http_auth = credentials.authorize(httplib2shim.Http())



回答2:


I decided to recode my web app in Python 2, still using the httplib2 package. Proxy info are now taken into account. It now works.



来源:https://stackoverflow.com/questions/36784437/google-api-proxy-httplib2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!