Как получить текущий URL-адрес сервера приложения appengine?

StackOverflow https://stackoverflow.com/questions/1015442

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top