我正在尝试从代码中获取当前运行的appengine java应用程序的服务器URL。也就是说,如果应用程序在我的本地开发机器上运行,我想以某种方式返回“http://localhost:8080”,但如果它在prod中运行,我想返回“http://myappid.appspot.com”。有没有可以做到这一点的java或appengine API?我想没有手动更改和读取配置文件或常量。
感谢。
答案 0 :(得分: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";
}
答案 1 :(得分: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')
这会发出'localhost:8081'或'blabla.appspot.com'作为第一行,而第二行则发出完整的URI,例如: “http://localhost:8081/zup”或“http://blabla.appspot.com/zup”。
更一般地说,您可以使用wsgiref.util
轻松地从任何WSGI环境中提取信息,并且由于App Engine在WSGI之上提供服务,因此应始终有简单的方法从任何框架的任何框架中撬开这样的环境你选择了; - )
答案 2 :(得分:7)
您应该可以使用getServerName():
boolean local = "localhost".equals(httpServletRequest.getServerName());
如果您需要更多信息,还可以使用其他方法,例如: getServerPort()。