Pergunta

Eu estou tentando obter a URL do servidor de um aplicativo java appengine atualmente em execução a partir do código. Ou seja, se o aplicativo está sendo executado em minha máquina local dev eu gostaria de alguma forma se voltou " http: // localhost: 8080 "mas se ele está sendo executado em prod eu gostaria de ser devolvido" http://myappid.appspot.com ". Há algum java ou da API AppEngine que pode fazer isso? Eu gostaria de não ter uma alterar manualmente e ler a partir de um arquivo de configuração ou uma constante.

Graças.

  • Aleem
Foi útil?

Solução

Você deve ser capaz de usar getServerName ():

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

Existem outros métodos, você também pode usar se você precisar de mais informações, por exemplo, getServerPort ().

Outras dicas

Esse é um trabalho para mim em Java em 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";
}

Aqui está um par de maneira de fazê-lo em seu manipulador de solicitação (se você estiver usando o webapp fornecido estrutura elementar):

  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' Esta opção emite ou 'blabla.appspot.com' como a primeira linha, e como o segundo como o URI completo em vez disso, por exemplo ' http: // localhost: 8081 / zup ' ou ' http://blabla.appspot.com/zup '.

De modo mais geral, você pode usar wsgiref.util facilmente informações extrato de qualquer ambiente WSGI, e desde App Engine serve no topo do WSGI deve sempre haver maneiras fáceis de erguer tal ambiente das garras de qualquer quadro que você escolheu ; -)

Eu sei que este foi respondida, mas um outro para jogar à mistura;

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

Referência: https://cloud.google.com/appengine/docs / java / appidentity / # Java_Asserting_identity_to_other_App_Engine_apps

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top