Appengine:调用同一服务器上另一个模块的端点

时间:2014-03-13 15:18:13

标签: java google-app-engine module google-cloud-endpoints gae-module

我正在使用目前有2个模块的App Engine服务器。我有用于端点和同步模块的默认模块。 第二个模块用于将我的服务器与另一个模块同步。所以我的同步模块从其他服务器获取数据,并且必须使用端点将其发送到默认模块。 为此,我生成了endpoints_client_library并将库添加到我的同步模块。我尝试了很多案例,但我无法正确地传达我的终点。每次我都会收到像“401 Unauthorized”这样的错误。

所以我不知道在我的服务器上使用生成的端点客户端库是否正确,或者是否有其他解决方案,可能更简单...

我只想将同步模块中的数据发送到默认值。

如果您需要一些代码,即使它不是非常完整且根本不起作用,只需说出来即可。

我正在使用的URLFetch代码:

AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
AppIdentityService.GetAccessTokenResult accessToken = appIdentity.getAccessToken(Collections.singleton(scope));



URLFetchService fetcher = URLFetchServiceFactory.getURLFetchService();
FetchOptions options = FetchOptions.Builder.doNotFollowRedirects().disallowTruncate();
HTTPRequest request = new HTTPRequest(url, HTTPMethod.GET, options);

HTTPHeader userAgent = new HTTPHeader("User-Agent", "AppEngine-Google; (+http://code.google.com/appengine; appid: appId)");
request.addHeader(userAgent);
HTTPHeader autho = new HTTPHeader("Authorization", "OAuth "+accessToken.getAccessToken());
request.addHeader(autho);
HTTPHeader contentType = new HTTPHeader("Content-Type", "application/json");
request.addHeader(contentType);

HTTPResponse response = fetcher.fetch(request);

int code = response.getResponseCode();
String resp = new String(response.getContent());

System.out.println(code);
System.out.println(resp);

结果:

401

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "{\"class\":\"com.domain.server.cloud.CloudException\",\"code\":2}",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "{\"class\":\"com.domain.server.cloud.CloudException\",\"code\":2}"
 }
}

1 个答案:

答案 0 :(得分:2)

遵循Communication between ModulesApp Engine Modules in Java的一般准则。在第二个代码示例之后,它表示您还可以使用URL Fetch Service进行异步流控制。

为了安全起见,文档继续为被调用模块(您的端点)提供建议以验证请求。手动或基本扩展管理员登录解决方案通常不起作用,因为默认情况下自动缩放。在您的方案中,Inbound-AppId标头将是一个非常简单和安全的选择。

正如您愿意为您的问题添加更多详细信息一样,我很乐意尝试为此答案添加更多详细信息。