2009-06-18 3 views
9

Я пытаюсь получить URL-адрес сервера текущего приложения appengine java из кода. То есть, если приложение работает на моем локальном компьютере-разработчике, я хотел бы как-то вернуть «http://localhost:8080», но если он работает в prod, я бы хотел, чтобы его вернули «http://myappid.appspot.com». Есть ли какие-либо API Java или API приложений, которые могут это сделать? Я бы не хотел вручную изменять и читать из файла конфигурации или константы.Как получить текущий URL-адрес приложения appengine?

Спасибо.

  • Aleem

ответ

7

вы должны быть в состоянии использовать getServerName():

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

Существуют и другие методы, которые вы также можете использовать, если вам нужно больше информации, например, getServerPort().

+0

Отлично, что сработало - спасибо! – aloo

8

Вот несколько способов сделать это в обработчике запроса (если вы используете при условии webapp элементарной структуры):

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

Срабатывает «локальный: 8081 'или' blabla.appspot.com 'в качестве первой строки, а второй, например, полный URI, например, 'http://localhost:8081/zup' или 'http://blabla.appspot.com/zup'.

В общем случае вы можете использовать wsgiref.util, чтобы легко извлекать информацию из любой среды WSGI, и поскольку App Engine работает поверх WSGI, всегда должны быть простые способы вытащить такую ​​среду из кладок любой структуры, выбрал ;-)

+1

Java, не Python! –

+9

Спасибо, что дали ответ Python, хотя, как и тот, кто пришел, ища ответ в Python. –

+1

@ Gordon, рад, что это оказалось для вас полезным (хотя я не обратил внимания на теги!). –

10

Это работает для меня в Java на 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"; 
} 
+1

StringUtils.equals?! –

0

Я знаю, что это был дан ответ, но еще один, чтобы бросить к соединению;

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

Ссылка: https://cloud.google.com/appengine/docs/java/appidentity/#Java_Asserting_identity_to_other_App_Engine_apps

Смежные вопросы