質問

現在実行中のappengine javaアプリのサーバーURLをコードから取得しようとしています。つまり、ローカルの開発マシンでアプリが実行されている場合、どういうわけか返されたい" http:// localhost:8080 " prodで実行されている場合は、" http://myappid.appspot.com を返します。 &quot ;.これを行うことができるJavaまたはappengine APIはありますか?構成ファイルまたは定数を手動で変更して読み取る必要はありません。

ありがとう。

  • アリーム
役に立ちましたか?

解決

getServerName()を使用できるはずです:

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

さらに情報が必要な場合は、他にも使用できる方法があります。 getServerPort()。

他のヒント

これは、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";
}

リクエストハンドラーでそれを行う方法がいくつかあります(提供されている 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」が最初の行として、2番目の行が代わりに完全なURIのように出力されます。 ' http:// localhost:8081 / zup 'または ' http://blabla.appspot.com/zup '。

より一般的には、 wsgiref.util を使用して任意のWSGI環境から情報を簡単に抽出できます。また、App EngineはWSGIの上で動作するため、そのような環境を選択したフレームワークのクラッチ;-)

これには回答がありますが、もう1つはミックスに追加します。

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