Comment obtenir l'URL du serveur actuel de appengine app?
-
06-07-2019 - |
Question
J'essaie d'obtenir l'URL du serveur d'une application Java en cours d'exécution à partir du code. Autrement dit, si l'application est exécutée sur ma machine de développement locale, je souhaite en quelque sorte être renvoyé & http: // localhost: 8080 " mais si cela fonctionne, je souhaiterais être renvoyé & http://myappid.appspot.com " ;. Existe-t-il des API Java ou Appengine pouvant le faire? Je voudrais ne pas avoir à modifier manuellement et lire à partir d'un fichier de configuration ou une constante.
Merci.
- Aleem
La solution
Vous devriez pouvoir utiliser getServerName ():
boolean local = "localhost".equals(httpServletRequest.getServerName());
Il existe d’autres méthodes que vous pouvez également utiliser si vous avez besoin de plus d’informations, par exemple. getServerPort ().
Autres conseils
Cela fonctionne pour moi en Java sur 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";
}
Voici quelques façons de le faire dans votre gestionnaire de demandes (si vous utilisez le cadre élémentaire webapp
fourni):
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')
Ceci émet 'localhost: 8081' ou 'blabla.appspot.com' comme première ligne, et comme seconde comme l'URI complet à la place, par ex. ' http: // localhost: 8081 / zup ' ou ' http://blabla.appspot.com/zup '.
Plus généralement, vous pouvez utiliser wsgiref.util
pour extraire facilement les informations de tout environnement WSGI. Et puisque App Engine est utilisé en plus de WSGI, il doit toujours exister des moyens simples de extraire un tel environnement. les embrayages de n'importe quel cadre que vous avez choisi; -)
Je sais que cela a été répondu, mais un autre à jeter dans le mélange;
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 + "/";