1
我收到異常訪問令牌的Socket了java.lang.RuntimeException在谷歌的AppEngine(OAuth 2.0用戶)獲取訪問令牌:com.google.apphosting.api.ApiProxy $ FeatureNotEnabledException:如何使用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;
}
}
嗨,我使用URLFetch API我得到{「error」:「invalid_request」}我的java代碼是在這裏http://pastebin.com/2TferLyB這個代碼有什麼問題? – Ashraf
你不能設置'Content-length',這是由GAE自動完成的。 –
這也是一個POST - 你必須創建一個'x-www-form-urlencoded'主體,而不是將參數添加到標題中。 –