2013-06-04 3 views
1

я получаю исключение для доступа к токенов сокетов java.lang.RuntimeException: com.google.apphosting.api.ApiProxy $ FeatureNotEnabledException:Как получать маркер доступа в Google AppEngine (OAuth 2.0) с помощью Java

Есть ли решение разместить запрос (код) для обмена маркерами

Вот мой код для получения кода доступа токена я использую HTTPClient является любым решением

в index.jsp

response.sendRedirect("https://accounts.google.com/o/oauth2/auth? scope=https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email&state=%2Fprofile&response_type=code&client_id=158645513564-88hf7od82d09ipr7uiamd540jpd2da1g.apps.googleusercontent.com&redirect_uri=http://gfksgnbgfcv.appspot.com/index2.jsp"); 

в index2.jsp

<%@page import="com.login.client.TEST"%> 
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 
<%@page errorPage="errorPage.jsp" %> 
<% 
    String code = request.getParameter("code"); 
    String data=TEST.getParseValue(code); 
%> 
<%=code%> 
<%=data %> 

И Java код

package com.login.client; 


    import java.io.IOException; 
    import java.io.UnsupportedEncodingException; 

    import java.util.ArrayList; 
    import java.util.List; 

    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    import net.sf.json.JSONObject; 
    import net.sf.json.JSONSerializer; 
    import net.sourceforge.htmlunit.corejs.javascript.json.JsonParser.ParseException; 

    import org.apache.commons.httpclient.HttpClient; 
    import org.apache.commons.httpclient.HttpException; 
    import org.apache.commons.httpclient.HttpStatus; 
    import org.apache.commons.httpclient.methods.GetMethod; 
    import org.apache.commons.httpclient.methods.PostMethod; 
    import org.apache.commons.httpclient.methods.StringRequestEntity; 
    import org.apache.commons.io.IOUtils; 


    public class TEST { 

public static String getParseValue(String code) { 
     String token="no token"; 
     String foros = "code="+code + 
        "&client_id=<YOUR_CLIENT_ID>" + 
        "&client_secret=<YOUR_CLIENT_SECRET>" + 
        "&redirect_uri="+"http://gfksgnbgfcv.appspot.com/index2.jsp" + 
        "&grant_type=authorization_code"; 
    HttpClient client = new HttpClient(); 
     String url = "https://accounts.google.com/o/oauth2/token"; 
     PostMethod post = new PostMethod(url); 
     post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 

     try { 
      post.setRequestEntity(new StringRequestEntity(foros, null, null)); 
     } catch (UnsupportedEncodingException e) { 
      throw new RuntimeException(e); 
     } 
     String accessToken = null; 
     try { 
      client.executeMethod(post); 

      String jsonTxt = IOUtils.toString(post 
        .getResponseBodyAsStream()); 

      JSONObject json = (JSONObject) JSONSerializer 
        .toJSON(jsonTxt); 
      String resp = post.getResponseBodyAsString(); 

      token = (String) json.getString("access_token"); 
     } catch (HttpException e) { 
      token=e.getMessage(); 
      throw new RuntimeException(e); 
     } catch (IOException e) { 
      token=e.getMessage(); 
      throw new RuntimeException(e); 
     } catch (Exception e) { 
      token=e.getMessage(); 
      throw new RuntimeException(e); 
     } 
    return token; 

     } 

}

ответ

2

Apache HttpClient не поддерживается на GAE (по крайней мере, не без tweaks). Вы должны использовать URLFetch API.

+0

Привет, я использую API URL API. Я получаю {"error": "invalid_request"} мой код java здесь http://pastebin.com/2TferLyB, что с этим кодом? – Ashraf

+0

Вы не должны устанавливать 'Content-length', это выполняется автоматически GAE. –

+0

Также это POST - вы должны создать тело 'x-www-form-urlencoded', а не добавлять параметры в заголовок. –