Pregunta

Estoy tratando de obtener la URL del servidor de una aplicación de Java appengine actualmente en ejecución desde el código. Es decir, si la aplicación se está ejecutando en mi máquina de desarrollo local, me gustaría que de alguna manera me devuelvan " http: // localhost: 8080 " pero si se ejecuta en prod me gustaría que me devuelvan " http://myappid.appspot.com " ;. ¿Hay alguna API de Java o appengine que pueda hacer esto? Me gustaría no tener que cambiar y leer manualmente desde un archivo de configuración o una constante.

Gracias.

  • Aleem
¿Fue útil?

Solución

Debería poder usar getServerName ():

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

Existen otros métodos que también puede usar si necesita más información, p. ej. getServerPort ().

Otros consejos

Esto está funcionando para mí en Java en 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";
}

Aquí hay un par de formas de hacerlo en su controlador de solicitudes (si está utilizando el marco elemental webapp proporcionado):

  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')

Esto emite 'localhost: 8081' o 'blabla.appspot.com' como la primera línea, y como la segunda como el URI completo en su lugar, p. ' http: // localhost: 8081 / zup ' o ' http://blabla.appspot.com/zup '.

De manera más general, puede usar wsgiref.util para extraer fácilmente información de cualquier entorno WSGI, y dado que App Engine sirve sobre WSGI, siempre debe haber formas fáciles de extraer ese entorno de las garras de cualquier marco que hayas elegido ;-)

Sé que esto ha sido respondido, pero otro para agregar a la mezcla;

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

Referencia: https://cloud.google.com/appengine/docs / java / appidentity / # Java_Asserting_identity_to_other_App_Engine_apps

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top