如何从(非网络)Python 客户端访问经过身份验证的 Google App Engine 服务?

2024-01-07

我有一个 Google App Engine 应用程序 -http://mylovelyapp.appspot.com/ 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()

它打印“确定”

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

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

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

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()

auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(None,
                          uri='http://mylovelyapp.appspot.com/mylovelypage',
                          user='[email protected] /cdn-cgi/l/email-protection',
                          passwd='billybobspasswd')
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)

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

我试过了Google 的 ClientLogin 身份验证 API http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html,但我无法让它工作。

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" % ("[email protected] /cdn-cgi/l/email-protection", "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客户端库 http://code.google.com/p/gdata-python-client/做这种事?从 我读过的内容是,我认为它应该能够访问 App Engine 应用程序, 但我也没有在 App Engine 的身份验证方面取得任何成功

任何指向示例、文章甚至只是关键字的指针我都应该 寻找让我开始的方法,将不胜感激。

Thanks!


appcfg.py(将数据上传到 App Engine 的工具)必须准确执行此操作,以便通过 App Engine 服务器对自身进行身份验证。相关功能被抽象到appengine_rpc.py中。简而言之,解决方案是:

  1. Use the 谷歌客户端登录API http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html获取身份验证令牌。 appengine_rpc.py 在中执行此操作获取AuthToken http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/appengine_rpc.py#180
  2. 将身份验证令牌发送到 App Engine 应用程序上的特殊 URL。然后该页面返回一个 cookie 和一个 302 重定向。忽略重定向并存储 cookie。 appcfg.py 在中执行此操作_GetAuthCookie http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/appengine_rpc.py#228
  3. 在以后的所有请求中使用返回的 cookie。

您可能还想看看_认证 http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/appengine_rpc.py#253,了解 appcfg 如何处理来自 ClientLogin 的各种返回代码,以及_GetOpener http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/appengine_rpc.py#397,了解 appcfg 如何创建不遵循 HTTP 重定向的 urllib2 OpenerDirector。或者,事实上,您可以直接使用 AbstractRpcServer 和 HttpRpcServer 类,因为它们几乎可以完成您需要的所有操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从(非网络)Python 客户端访问经过身份验证的 Google App Engine 服务? 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • Asp.net Identity 注销其他用户

    我正在使用 Asp net Identity 来验证用户身份 并尝试从管理端锁定任何用户 但是当我锁定任何在线用户时 它并没有注销 我读过很多关于我的问题的评论 但它们都不起作用 我尝试使用 UserManager UpdateSecuri
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • JDialog setVisible(false) 与 dispose()

    在对话框上使用 setVisible false 并稍后重用它是否有意义 或者每次调用 dispose 并创建一个新的 JDialog 更安全 setVisible false 的内存泄漏怎么办 编辑 我的问题并不是关于退出应用程序 有关以
  • MPMoviePlayerPlaybackDidFinishNotification 在不应调用时被调用

    根据 Apple 的 MPMoviePlayerController 文档 MPMoviePlayerPlaybackDidFinishNotification 如果电影播放器 以全屏模式显示并且用户点击 完成 按钮 则不会发送此通知 在我
  • Servlet Faces Servlet 不可用(richfaces 4、tomcat 7)

    我正在尝试我的第一个 richfaces 项目 因此 我创建了一个新的 JSF 项目 使用 JBoss Tools eclipse 插件 并选择了以下选项 JSF2 0 JSFKickStartWithoutLibs 我没有对生成的示例进行
  • 如何显示图片?

    我在调用图片进行查看时遇到问题 在我的应用程序中 他们单击按钮后 我想将他们带到一个新页面 其中将显示图片并在其下方显示一些文本 对于这个例子 如果狗位于页面顶部 那么我想要一张图片 然后在它下面说我想要诸如品种和品种成本之类的东西 谁能帮
  • 我怎样才能修复“&需要左值”[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 所以 我创建了一个项目并复制本教程 https github com microsoft DirectX Graphic
  • 在列表中使用两种单独的字符串类型

    好的 对于我的 C 编程课程 我正在制作一款冒险游戏 我想我明白如何做大部分事情 但我在建立 世界 时遇到了困难 我有一个面向世界的课程 World cs 我开始为每个房间创建一个列表 然而 我很困惑为每个房间添加名称和描述 例如 如果Li
  • 可见命令出现在上下文菜单中的时间

    我正在尝试使用 menuContribution 中的 visibleWhen 表达式配置上下文菜单中命令的可见性 我想做的是仅当您执行以下操作时才使该命令在上下文菜单中可见 在资源视图 或包视图 中右键单击某些文件类型 资源 右键单击已打
  • 使用 tkinter 创建椭圆形的流畅运动

    我正在尝试使用 tkinter 创建 Connect Four 一旦圆盘被放置在特定的柱中 我希望它以流体运动下降到柱的底部 我尝试过使用 Canvas 类的移动命令 但我不确定我是否使用错误 或者也许我最好在每次迭代中删除并重新绘制椭圆形
  • 仅对带有 Pandas 的字符串列应用转换,忽略数值数据

    所以 我有一个相当大的数据框 有 85 列和近 90 000 行 我想在所有数据框中使用 str lower 但是 有几列包含数字数据 有一个简单的解决方案吗 gt df A B C 0 10 John Dog 1 12 Jack Cat
  • 使用 Vue.JS 删除多维数组内的值

    早上好 我有以下表格 当您单击 新项目 按钮时 一个新的文本字段将添加到相关部分 如果单击 新部分 按钮 则会创建一个新部分 当您单击该部分右上角的 X 时 该部分将成功删除 但是 我正在尝试实现每个 添加 文本字段下方 右侧 的 X 我想
  • Python:按日期对列表进行排序?

    是否可以按日期对列表进行排序 它用于流程图 因此必须以较小列表对的列表格式进行组织 我希望能够按日期排序 2014 5 29 19 2014 5 28 16 2014 5 30 20 2014 5 23 16 2014 5 22 1225
  • 如何在 Web 应用程序中实现 REST?

    我想知道如何在我的 Web 应用程序中实现 REST 我想创建一个基于此服务的网络应用程序 但我不知道该怎么做 现在 我使用 J2EE 和 Tomcat 这些技术应该考虑哪些因素 EDIT 抱歉 我的意思是 RESTful 服务 REST
  • CSS 中的动态气泡

    I m trying to make something like this 我想使用纯CSS Bootstrap v3 已加载 我已经非常接近类似的事情了 bubble position relative left 15px paddin
  • 如何为 @Html.ActionLink cshtml 页面中新打开的选项卡的标题设置名称

    我当前的代码在Index cshtml page Html ActionLinks Html ActionLink objList Name Name ControllerName new Id objList Id new target
  • 在 web.xml 中使用 JSF EL 表达式

    我可以在 web xml 中使用 EL 表达式吗 像这样 Web xml
  • 如果父类没有实现可序列化,则序列化子类?

    public class Employee2 extends Employee1 public class Employee1 extends Employee0 public class Employee0 现在我序列化 Employee
  • 如何删除默认的 ASP.NET Core Identity 端点?

    假设我想编写自己的登录 注销端点及其视图 但由于某种原因 我正在努力删除现有端点 每当我删除可能与这些端点相关的内容时 它们就会重新创建自己并返回默认视图 基本上我想删除尽可能多的从 ASP NET Core Identity 生成的默认端
  • 如何让 Android 设备振动?不同频率?

    我写了一个Android应用程序 现在 我想让设备在发生特定操作时振动 我怎样才能做到这一点 Try import android os Vibrator Vibrator v Vibrator getSystemService Conte
  • Laravel 将所有请求重定向到 HTTPS

    我们的整个网站将通过 https 提供服务 我的每条路线都有 https 但是 如果他们尝试通过 http 进行访问 我该如何将他们重定向到 https Route group array https function all of our
  • 如何从(非网络)Python 客户端访问经过身份验证的 Google App Engine 服务?

    我有一个 Google App Engine 应用程序 http mylovelyapp appspot com http mylovelyapp appspot com 它有一个页面 mylovelypage 目前 该页面只是self r