如何获取appengine app的当前服务器URL?

alo*_*loo 10 java google-app-engine

我正在尝试从代码中获取当前正在运行的appengine java应用程序的服务器URL.也就是说,如果应用程序在我的本地开发机器上运行,我想以某种方式返回" http:// localhost:8080 "但是如果它在prod中运行我想要返回" http:// myappid. appspot.com ".有没有可以做到这一点的java或appengine API?我想没有手动更改和读取配置文件或常量.

谢谢.

  • 阿利姆

San*_*kan 10

这对我在Java上的appengine工作:

String hostUrl; 
String environment = System.getProperty("com.google.appengine.runtime.environment");
if (StringUtils.equals("Production", environment)) {
    String applicationId = System.getProperty("com.google.appengine.application.id");
    String version = System.getProperty("com.google.appengine.application.version");
    hostUrl = "http://"+version+"."+applicationId+".appspot.com/";
} else {
    hostUrl = "http://localhost:8888";
}
Run Code Online (Sandbox Code Playgroud)

  • StringUtils.equals ?! (2认同)

Ale*_*lli 8

这里有两种方法可以在您的请求处理程序中执行此操作(如果您使用提供的webapp基本框架):

  def get(self):
    self.response.out.write(self.request.headers.get('host', 'no host'))
    self.response.out.write('<br>\n')
    who = wsgiref.util.request_uri(self.request.environ)
    self.response.out.write(who + '<br>\n')
Run Code Online (Sandbox Code Playgroud)

此发射"本地主机:8081"或"blabla.appspot.com"作为第一行,并作为第二类的完整URI代替,如" HTTP://本地主机:8081/ZUP "或' 的http://布拉布拉. appspot.com/zup '.

更一般地说,您可以使用wsgiref.util从任何WSGI环境中轻松提取信息,并且由于App Engine在WSGI之上提供服务,因此应该总是有简单的方法从您选择的任何框架的离合器中撬开这样的环境;-)

  • 感谢您提供Python答案,因为有人在Python中寻找答案. (9认同)

pje*_*esi 7

您应该能够使用getServerName():

boolean local = "localhost".equals(httpServletRequest.getServerName());
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,还可以使用其他方法,例如getServerPort().