Google app engine Can';无法通过GAE获得facebook访问权\u令牌

Google app engine Can';无法通过GAE获得facebook访问权\u令牌,google-app-engine,authentication,authorization,facebook-apps,facebook-authentication,Google App Engine,Authentication,Authorization,Facebook Apps,Facebook Authentication,当我试图从facebook获取访问令牌时,状态代码为404。这是一个用Java编写的GAE应用程序,我正在以编程方式获取access\u令牌。也就是说,一旦我获得了“代码”,我就会发出https请求以获得访问令牌。我正在使用restlet.org框架 public void getAccessToken( final Map<String,String> filter ) { //prepare and issue the request. Send in the host

当我试图从facebook获取访问令牌时,状态代码为404。这是一个用Java编写的GAE应用程序,我正在以编程方式获取access\u令牌。也就是说,一旦我获得了“代码”,我就会发出https请求以获得访问令牌。我正在使用restlet.org框架

public void getAccessToken( final Map<String,String> filter ) {
    //prepare and issue the request. Send in the host and other data
    String url = Application.getInstance().getAccessTokenUrl( this.getReference().getHostIdentifier(), filter );

    Client client = new Client(Protocol.HTTPS);
    client.setConnectTimeout(5000);
    Request request = new Request(Method.GET, url);

    client.handle(request, new Uniform() {
        @Override
        public void handle(Request arg0, Response response) {
            if ( response.getStatus().isSuccess() ) {
                if ( response.isEntityAvailable() ) {  
                    String result = response.getEntityAsText();
                    String results[] = result.split("&");
                    String accessTokens[] = results[0].split("=");
                    filter.put("access_token", accessTokens[1]);
                }
            } else {
                // the user doesn't exist
                log.warning("getAccessToken, description - " + response.getStatus().getDescription() + ", code - " + response.getStatus().getCode() + ", all - " + response.getStatus().toString());
                setStatus(new Status(Status.CLIENT_ERROR_NOT_FOUND, "Failed to get facebook access code."));
            }
        }
    });
}
public void getAccessToken(最终映射过滤器){
//准备并发出请求。发送主机和其他数据
字符串url=Application.getInstance().getAccessTokenUrl(this.getReference().getHostIdentifier(),过滤器);
客户端=新客户端(Protocol.HTTPS);
客户端.setConnectTimeout(5000);
请求=新请求(Method.GET,url);
client.handle(请求,新制服(){
@凌驾
公共无效句柄(请求arg0,响应){
if(response.getStatus().issucess()){
if(response.isEntityAvailable()){
字符串结果=response.getEntityAsText();
字符串结果[]=result.split(&);
字符串accessTokens[]=结果[0]。拆分(“”);
filter.put(“access_token”,accessTokens[1]);
}
}否则{
//用户不存在
log.warning(“getAccessToken,description-”+响应.getStatus().getDescription()+”,code-“+响应.getStatus().getCode()+”,all-“+响应.getStatus().toString());
setStatus(新状态(Status.CLIENT_ERROR_NOT_FOUND,“无法获取facebook访问代码”);
}
}
});
}
其中,代码、客户端id、客户端机密和重定向url都组合在一起创建正确的http url

当我从我的开发环境(192.168.1…/facebook/signin)本地运行它时,它工作得非常好。但是,当我在GAE上运行它时,它在尝试检索access_令牌时返回404。我已经记录了GAE发送的http请求,它是正确的。也就是说,如果我将请求(…)插入浏览器,它将正确返回访问令牌。我相信这证实了Facebook上的应用程序设置是正确的

因此,当代码从我的开发系统执行时,它会正确运行, 当我插入GAE在浏览器中发送的URL时,它会正常运行, 它仅在GAE发送http请求时失败


是否有人对这可能是什么或要查找什么有任何建议?

代码在哪里?日志条目呢?好的,我的错。。。重定向Url需要进行Url编码。现在它开始工作了。尽管如此,我仍然不知道为什么这从。。。当重定向URL也没有编码时。您应该发布详细信息作为您自己问题的答案。