python教程—如何从(非web) python客户机访问经过身份验证的谷歌应用程序引擎服务?-Python实用宝典

python教程—如何从(非web) python客户机访问经过身份验证的谷歌应用程序引擎服务?

我有一个谷歌应用程序引擎应用程序- http://mylovelyapp.appspot.com/ 它有一个页面mylovelypage目前,页面只是self。response。out。write('OK')

我有一个谷歌应用程序引擎应用程序- http://mylovelyapp.appspot.com/
它有一页——mylovelypage

目前,页面只是执行self.response.out.write('OK')

如果我在电脑上运行以下Python:

    import urllib2 f = urllib2.urlopen("http://mylovelyapp.appspot.com/mylovelypage") s = f.read() print s f.close()

它打印“OK”

问题是如果我在应用程序的yaml中添加login:required到这个页面

然后打印出谷歌帐户登录页面的HTML

我尝试过“常规”身份验证方法。如。

    passman = urllib2.HTTPPasswordMgrWithDefaultRealm() auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(None, uri='http://mylovelyapp.appspot.com/mylovelypage', user='billy.bob@gmail.com', passwd='billybobspasswd') opener = urllib2.build_opener(auth_handler) urllib2.install_opener(opener)

但这没有什么区别-我仍然得到登录页面的HTML回来。

我尝试过谷歌的ClientLogin auth API,但我无法让它工作。

    h = httplib2.Http() auth_uri = 'https://www.google.com/accounts/ClientLogin' headers = {'Content-Type': 'application/x-www-form-urlencoded'} myrequest = "Email=%s&Passwd=%s&service=ah&source=DALELANE-0.0" % ("billy.bob@gmail.com", "billybobspassword") response, content = h.request(auth_uri, 'POST', body=myrequest, headers=headers) if response['status'] == '200': authtok = re.search('Auth=(S*)', content).group(1) headers = {} headers['Authorization'] = 'GoogleLogin auth=%s' % authtok.strip() headers['Content-Length'] = '0' response, content = h.request("http://mylovelyapp.appspot.com/mylovelypage", 'POST', body="", headers=headers) while response['status'] == "302": response, content = h.request(response['location'], 'POST', body="", headers=headers) print content

我似乎能够得到一些令牌正确,但试图使用它在头部时,我调用'mylovelypage'仍然只是返回登录页面的HTML。:- (

有人能帮忙吗?

我可以使用GData client library来做这类事情吗?从
据我所知,我认为它应该能够访问App Engine应用程序,
但我也没能更成功地让应用引擎的认证工作

任何指向示例、文章甚至关键字的指针都应该是I
如果你能帮我开始,我将不胜感激。

谢谢!

回答

appcfg。上传数据到App Engine的工具必须通过App Engine服务器进行身份验证。相关功能抽象为appengine_rpc.py。简而言之,解决办法是:

  1. 使用谷歌ClientLogin API获得认证令牌。appengine_rpc.py在_GetAuthToken中执行此操作
  2. 将验证令牌发送到App Engine应用程序上的一个特殊URL。该页面然后返回一个cookie和302重定向。忽略重定向并存储cookie。appcfp .py在_GetAuthCookie中执行此操作
  3. 在以后的所有请求中使用返回的cookie。

你可能还想看< a href = " http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/appengine_rpc.py # 253“rel = " noreferrer " > _Authenticate < / >,看到从ClientLogin appcfg如何处理不同的返回码,和< a href = " http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/appengine_rpc.py # 397“rel = " noreferrer " > _GetOpener < / >,要查看appcfg如何创建不遵循HTTP重定向的urllib2 OpenerDirector。实际上,您也可以只批量使用AbstractRpcServer和HttpRpcServer类,因为它们几乎可以完成您需要的所有工作。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论