remote_api_shell.py与localhost dev_appserver

时间:2015-10-21 16:07:44

标签: python google-app-engine authentication

如何使用remote_shell_api.py连接到以dev_appserver.py(1.9.26 +)开头的Google App Engine开发实例?

从命令行我得到:

  

$ remote_api_shell.py -s localhost:8080 demo

     

...

     

urllib2.HTTPError:HTTP错误401:未经授权的尝试次数过多。

从具有以下内容的脚本运行时:

from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.tools import appengine_rpc

def fake_auth():
        return ('pw', 'pass')
remote_api_stub.ConfigureRemoteApi(
        None, path, fake_auth, servername=server,
        save_cookies=True, secure=False,
        rpc_server_factory=appengine_rpc.HttpRpcServer
)

一个得到:

  

google.appengine.tools.appengine_rpc.ClientLoginError:HTTP错误403:禁止

我已经追溯到AppEngine代码,但不清楚是否(或如何)伪造本地服务器的身份验证。

当我在代码中尝试OAuth时,例如

remote_api_stub.ConfigureRemoteApiForOAuth(server, path, secure=True)

它会抛出HTTPS错误。

当我将secure设置为False时,会获得urllib2.HTTPError: HTTP Error 401: Unauthorized Too many auth attempts.

看起来 应该是一种对开发应用服务器进行身份验证的方法,因为在google.appengine.tools.appengine_rpc.py:347有代码可以实现,但我还没有收集到如何使用它。< / p>

有没有人解决过这个问题?

据报道:code.google.com/p/googleappengine Issue 12465

3 个答案:

答案 0 :(得分:5)

答案是将远程api指向API服务器。当一个人启动appserver时,它会打印出这样的内容:

    remote_api_stub.ConfigureRemoteApi(
        None, path, fake_auth, servername=server,
        save_cookies=True, secure=False,
        rpc_server_factory=appengine_rpc.HttpRpcServer
    )

然后可以连接例如

server

其中localhost:58262None

如果第一个参数不是dev~APPID,那么它似乎必须是APPID(对于拥有remote_api_stub.ConfigureRemoteApiForOAuth( server.encode('ascii'), path, secure=not local ) 的人来说)

- 或 -

更简单的版本:

server

其中/_ah/remote与上述相同,使用开发服务器时路径为localTrue设置为server

如果$(document).ready(function(){ 不是ASCII编码,则很难调试。

答案 1 :(得分:4)

以下是我解决此问题的方法。我利用了remote_api所具有的钩子,不确定它是否在源代码之外被记录,但是在那里。

在appng文件根目录的appengine_config.py中添加以下行。

if (os.environ.get('SERVER_SOFTWARE') and
    os.environ['SERVER_SOFTWARE'].startswith('Development')):
    remoteapi_CUSTOM_ENVIRONMENT_AUTHENTICATION = (
        'SERVER_SOFTWARE', [os.environ['SERVER_SOFTWARE']])

效果将是您的应用会将开发服务器上的所有远程API请求视为来自管理员并让他们通过。这应该对开发环境足够好。

答案 2 :(得分:0)

gae123回答我的工作,但我已准备好客户身份验证,所以我使用了以下更新

get_heap_array_index()