Как получить текущий адрес сервера приложения appengine? - PullRequest
10 голосов
/ 19 июня 2009

Я пытаюсь получить URL-адрес сервера запущенного в данный момент Java-приложения appengine из кода. То есть, если приложение работает на моем локальном компьютере разработчика, я хотел бы как-то получить "http://localhost:8080", но если оно работает в prod, я бы хотел, чтобы его вернули" http://myappid.appspot.com". Есть ли какие-либо API Java или Appengine, которые могут сделать это? Я бы не хотел вручную изменять и читать из файла конфигурации или константы.

Спасибо.

  • Алим

Ответы [ 4 ]

10 голосов
/ 20 мая 2011

Это работает для меня в 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";
}
8 голосов
/ 19 июня 2009

Вот пара способов сделать это в вашем обработчике запросов (если вы используете предоставленную элементарную структуру 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, всегда должны быть простые способы извлечь такую ​​среду из лап любой среды, которую вы используете. мы выбрали; -)

7 голосов
/ 19 июня 2009

Вы должны иметь возможность использовать getServerName ():

boolean local = "localhost".equals(httpServletRequest.getServerName());

Существуют и другие методы, которые вы также можете использовать, если вам нужна дополнительная информация, например, getServerPort ().

0 голосов
/ 25 августа 2015

Я знаю, что на этот вопрос уже есть ответ, но еще один, который нужно добавить в смесь;

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 + "/";

Ссылка: https://cloud.google.com/appengine/docs/java/appidentity/#Java_Asserting_identity_to_other_App_Engine_apps

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...