首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当服务器绑定到特定的IP (而不是本地主机)时,如何使Google远程API与本地开发服务器协同工作?

当服务器绑定到特定的IP (而不是本地主机)时,如何使Google远程API与本地开发服务器协同工作?
EN

Stack Overflow用户
提问于 2013-05-25 19:33:07
回答 3查看 3K关注 0票数 4

使用remote (remote_api_shell.py)可以在生产服务器上正常工作。但是,它仅在开发服务器在localhost上服务时才能在开发服务器上工作。当服务器在特定IP (例如,dev_appserver.py --host=192.168.0.1)上运行时,它无法工作。

这是使用Python。我敢肯定这在1.7.5版本上有效。它不适用于1.7.61.8.0

这里有一个具体的案例:

运行服务器并让它绑定到默认地址(localhost:8080):

代码语言:javascript
运行
复制
/path/to/dev_appserver.py myapp/app.yaml
INFO     2013-05-25 19:11:15,071 sdk_update_checker.py:244] Checking for updates to the SDK.
INFO     2013-05-25 19:11:15,323 api_server.py:152] Starting API server at: http://localhost:39983
INFO     2013-05-25 19:11:15,403 dispatcher.py:98] Starting server "default" running at: http://localhost:8080
INFO     2013-05-25 19:11:15,405 admin_server.py:117] Starting admin server at: http://localhost:8000

启动远程API shell,它运行良好:

代码语言:javascript
运行
复制
$ ./remote_api_shell.py -s localhost:8080
Email: x@x
Password: 
App Engine remote_api shell
Python 2.7.2+ (default, Jul 20 2012, 22:15:08) 
[GCC 4.6.1]
The db, ndb, users, urlfetch, and memcache modules are imported.
dev~furloughfun> 

但是,如果您使用指定的主机启动服务器:

代码语言:javascript
运行
复制
/path/to/dev_appserver.py --host=192.168.0.1 myapp/app.yaml
INFO     2013-05-25 19:11:53,304 sdk_update_checker.py:244] Checking for updates to the SDK.
INFO     2013-05-25 19:11:53,554 api_server.py:152] Starting API server at: http://localhost:44650
INFO     2013-05-25 19:11:53,633 dispatcher.py:98] Starting server "default" running at: http://192.168.0.1:8080
INFO     2013-05-25 19:11:53,634 admin_server.py:117] Starting admin server at: http://localhost:8000

注意,它说Starting API server at: http://localhost:44650,即使内容在http://192.168.0.1:8080上服务。这是否表明您只能在本地主机上运行?也许是出于安全原因?

另外,当您现在尝试remote_api_shell.py时,您只能使用有效的帐户登录(不允许伪造帐户),并且它会立即出错并终止。

控制台错误以:

代码语言:javascript
运行
复制
urllib2.HTTPError: HTTP Error 200: OK

本地开发服务器输出:

代码语言:javascript
运行
复制
INFO 2013-05-25 19:24:06,674 server.py:528] "GET /_ah/remote_api?rtok=90927106532 HTTP/1.1" 401 57

有人知道这是怎么回事吗?

是否不可能访问localhost以外的远程API?

如果您的内容在特定的IP上服务,是否不可能访问远程API (即使是在localhost上)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-25 21:07:28

api服务器似乎没有设置主机的选项。dev_appserver.py可以为内容和管理服务器设置主机端口,也可以为api服务器仅设置端口(api_port选项)。示例:

代码语言:javascript
运行
复制
dev_appserver.py --host=192.168.5.92 
                 --admin_host 192.168.5.92 --admin_port 9000 
                 --api_port 7000 .

运行此报告:

代码语言:javascript
运行
复制
 api_server.py:153] Starting API server at: http://localhost:7000

 dispatcher.py:164] Starting server "default" running at: http://192.168.5.92:8080

 admin_server.py:117] Starting admin server at: http://192.168.5.92:9000

查看GAE dev_appserver的来源,启动服务器的api_server方法的调用方是模块devappserver2.py,其行是:

代码语言:javascript
运行
复制
apis = api_server.APIServer('localhost', options.api_port,
                             configuration.app_id)

您可以看到硬编码主机名localhost

如果您没有找到好的解决办法,我建议通过引入一个新选项和devappserver2.py来修补附补丁的报告问题

票数 6
EN

Stack Overflow用户

发布于 2015-10-16 17:39:46

现在,至少在SDK的1.9.27版本中,--api_host选项对此有帮助。

票数 1
EN

Stack Overflow用户

发布于 2014-01-11 02:59:03

这只是一个更新,因为GAE文件结构已经改变了。我的%ProgramFiles%\Google\google_appengine\google\appengine\tools\devappserver2\api_server.py位于这个文件中,您可以看到API服务器的定义。

代码语言:javascript
运行
复制
class APIServer(wsgi_server.WsgiServer):
  """Serves API calls over HTTP."""

  def __init__(self, host, port, app_id):
    self._app_id = app_id
    self._host = host
    super(APIServer, self).__init__((host, port), self)

我尝试通过GAE App的GUI传递端口参数,它似乎根本不起作用,所以我只是硬编码这个端口,否则端口是随机的。这也可能导致到远程api服务器的连接错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16753192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档