Como obter a URL atual do servidor de aplicativo appengine?
-
06-07-2019 - |
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
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 + "/";