كيفية الحصول على عنوان URL الحالي للخادم لتطبيق appengine؟

StackOverflow https://stackoverflow.com/questions/1015442

  •  06-07-2019
  •  | 
  •  

سؤال

أحاول الحصول على عنوان URL للخادم لتطبيق appengine Java قيد التشغيل حاليًا من التعليمات البرمجية.أي أنه إذا كان التطبيق يعمل على جهاز التطوير المحلي الخاص بي، فأنا أرغب في إعادته بطريقة ما "http://localhost:8080"ولكن إذا كان قيد التشغيل في المنتج، فأنا أرغب في إعادتي"http://myappid.appspot.com".هل هناك أي واجهات برمجة تطبيقات Java أو Appengine يمكنها القيام بذلك؟لا أرغب في التغيير والقراءة يدويًا من ملف التكوين أو الثابت.

شكرًا.

  • عليم
هل كانت مفيدة؟

المحلول

يجب أن تكون قادرًا على استخدام getServerName():

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

هناك طرق أخرى يمكنك استخدامها أيضًا إذا كنت بحاجة إلى مزيد من المعلومات، على سبيل المثال.getServerPort ().

نصائح أخرى

هذا يعمل بالنسبة لي في 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";
}

إليك طريقتان للقيام بذلك في معالج الطلب الخاص بك (إذا كنت تستخدم الملف المقدم 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، فيجب أن تكون هناك دائمًا طرق سهلة لانتزاع مثل هذه البيئة من براثن أي إطار عمل اخترته؛-)

أعلم أنه تمت الإجابة على هذا السؤال، ولكن هناك سؤال آخر يجب إضافته إلى هذا المزيج؛

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top