【问题标题】:How to get the current server URL of appengine app?如何获取 appengine 应用的当前服务器 URL?
【发布时间】:2009-06-18 22:01:45
【问题描述】:

我正在尝试从代码中获取当前正在运行的 appengine java 应用程序的服务器 URL。也就是说,如果应用程序在我的本地开发机器上运行,我想以某种方式返回“http://localhost:8080”,但如果它在 prod 中运行,我希望返回“http://myappid.appspot.com”。是否有任何 java 或 appengine API 可以做到这一点?我不想手动更改和读取配置文件或常量。

谢谢。

  • 阿利姆

【问题讨论】:

    标签: java google-app-engine


    【解决方案1】:

    这在 appengine 上的 Java 中为我工作:

    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";
    }
    

    【讨论】:

    • StringUtils.equals ?!
    • 什么StringUtils? “Production”.equals(environment) 有什么问题?
    【解决方案2】:

    这是在您的请求处理程序中执行此操作的几种方法(如果您使用提供的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')
    

    这会发出 'localhost:8081' 或 'blabla.appspot.com' 作为第一行,而第二行则像完整的 URI,例如'http://localhost:8081/zup' 或 'http://blabla.appspot.com/zup'。

    更一般地说,您可以使用wsgiref.util 轻松地从任何 WSGI 环境中提取信息,并且由于 App Engine 在 WSGI 之上提供服务,因此应该总是有简单的方法可以从您的任何框架的魔掌中撬出这样的环境'已经选择了;-)

    【讨论】:

    • 感谢您提供 Python 答案,但作为一个在 Python 中寻找答案的人。
    • @Gordon,很高兴这对你有用(即使我没有适当注意标签!)。
    【解决方案3】:

    你应该可以使用 getServerName():

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

    如果您需要更多信息,还可以使用其他方法,例如获取服务器端口()。

    【讨论】:

      【解决方案4】:

      我知道这已经得到了回答,但还有一个要加入其中;

      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

      【讨论】:

        猜你喜欢
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        相关资源
        最近更新 更多