Как получить текущий URL-адрес сервера приложения appengine?
-
06-07-2019 - |
Вопрос
Я пытаюсь получить URL-адрес сервера текущего java-приложения appengine из кода.То есть, если приложение запущено на моем локальном компьютере разработчика, я хотел бы каким-то образом получить возврат ".http://localhost:8080" но если он работает в prod , я бы хотел , чтобы его вернули " .http://myappid.appspot.com".Существуют ли какие-либо API java или appengine, которые могут это сделать?Я бы не хотел, чтобы a менялся вручную и считывался из конфигурационного файла или константы.
Спасибо.
- Алим
Решение
Вы должны иметь возможность использовать getServerName():
boolean local = "localhost".equals(httpServletRequest.getServerName());
Существуют и другие методы, которые вы также можете использовать, если вам нужно больше информации, напримерgetServerPort().
Другие советы
Это работает у меня на 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";
}
Вот пара способов сделать это в вашем обработчике запросов (если вы используете предоставленный 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, всегда должны быть простые способы вырвать такую среду из лап любого фреймворка, который вы выбрали;-)
Я знаю, что на этот вопрос был дан ответ, но нужно добавить еще один;
import com.google.apphosting.api.ApiProxy;
...
final ApiProxy.Environment env = ApiProxy.getCurrentEnvironment();
final Map<String, Object> attributes = env.getAttributes();
final String hostAndPort = (String) attributes.get("com.google.appengine.runtime.default_version_hostname");
final String url = "http://" + hostAndPort + "/";