Wie die aktuelle Server-URL von appengine App bekommen?
-
06-07-2019 - |
Frage
Ich versuche, die Server-URL einer aktuell laufende appengine Java-Anwendung von Code zu erhalten. Das heißt, wenn der App auf meiner lokalen Dev-Maschine läuft würde Ich mag irgendwie „ http bekommen zurückgegeben: // localhost: 8080 „aber wenn es in prod läuft würde Ich mag zurückzusenden“ http://myappid.appspot.com “. Gibt es Java oder appengine API, die dies tun können? Ich möchte nicht haben, um manuell zu ändern und aus einer Konfigurationsdatei oder eine Konstante lesen.
Danke.
- Aleem
Lösung
Sie sollten in der Lage sein getServerName () zu verwenden:
boolean local = "localhost".equals(httpServletRequest.getServerName());
Es gibt andere Methoden, die Sie auch, wenn Sie weitere Informationen verwenden können, benötigen, beispielsweise getServerPort ().
Andere Tipps
Dies funktioniert für mich in Java auf 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";
}
Hier ist ein paar, wie es in Ihren Request-Handler zu tun (wenn Sie die mitgelieferte webapp
elementarer Framework verwenden):
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')
Dieses emittiert ‚localhost: 8081‘ oder ‚blabla.appspot.com‘ als erste Zeile, und als die zweite, wie die vollständige URI statt, z.B. ' http: // localhost: 8081 / zup ' oder ‚ http://blabla.appspot.com/zup ‘.
Generell können Sie wsgiref.util
verwenden leicht Informationen zu extrahieren, aus jeder WSGI Umgebung, und da App Engine dient oben auf WSGI es immer einfache Möglichkeiten sollte eine solche Umgebung aus den Klauen was Rahmen Sie sich entschieden haben hebeln ; -)
Ich weiß, das beantwortet wurde, aber ein anderer in den Mix zu werfen;
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 + "/";