如何使用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>
有没有人解决过这个问题?
答案 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:58262
为None
。
如果第一个参数不是dev~APPID
,那么它似乎必须是APPID
(对于拥有remote_api_stub.ConfigureRemoteApiForOAuth(
server.encode('ascii'), path, secure=not local
)
的人来说)
更简单的版本:
server
其中/_ah/remote
与上述相同,使用开发服务器时路径为local
,True
设置为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()