我在当前具有2个模块的应用程序服务器上工作。我有用于端点和同步模块的默认模块。该第二个模块用于将我的服务器与另一个模块同步。因此,我的同步模块从其他服务器中获取数据,并且必须使用端点将其发送到默认模块。为此,我生成了Endpoints_client_library,并将库添加到我的同步模块中。我尝试了很多案例,但无法正确传达终点。每次我都会遇到" 401未经授权"之类的错误。
所以我不知道这是否是使用服务器上生成的端点客户库库的正确方法,或者是否有另一个解决方案,也许更简单...
我只想将数据从我的同步模块发送到默认值。
如果您需要一些代码,即使它不是很完整并且根本不起作用,请说,我会。
我正在使用的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}"
}
}
遵循Java App Engine模块中模块之间通信的一般指南。在第二个代码示例之后,它说您也可以将URL获取服务用于异步流控制。
为了安全性,文档继续提供有关调用模块(您的端点)的建议,以验证请求。手册或基本缩放管理登录解决方案通常不起作用,因为自动缩放是默认设置。在您的情况下,入站上标头将是一个非常简单且安全的选择。
就像您愿意为您的问题添加更多详细信息一样,我很乐意为此答案添加更多详细信息。