java.io.IOException:服务器返回HTTP响应代码:401为URL:https://accounts.google.com/o/oauth2/token在java中使用gmail进行日志记录时

时间:2015-07-09 10:43:48

标签: java gwt oauth-2.0

我想将登录与gmail集成以及在我们的网站上登录facebook,这样没有新的注册用户就可以在我们的网站上创建他/她的帐户。它是一个基于java的网站的gwt。我尝试了一些代码并收到错误 java.io.IOException:服务器返回HTTP响应代码:401为URL:https://accounts.google.com/o/oauth2/token ,我完全不知道为什么我收到此错误。  我使用thisdoc代码。任何帮助,为什么我实际上得到这个错误。我错过了什么吗?任何帮助。

1 个答案:

答案 0 :(得分:0)

显然它是未经授权的(401)..您必须提供 client_id client_secret ,并且每个Gmail API请求都需要访问令牌

在重定向的方法中尝试此代码

        String code = request.getParameter("code");

        String urlParameters = "code=" + code + "&client_id="
                + CLIENT_ID + "&client_secret="
                + CLIENT_SECRET + "&redirect_uri="
                + REDIRECT_GMAIL_URI
                + "&grant_type=authorization_code";

        URL url = new URL("https://accounts.google.com/o/oauth2/token");
        URLConnection urlConn = url.openConnection();
        urlConn.setDoOutput(true);
        OutputStreamWriter writer = new OutputStreamWriter(
                urlConn.getOutputStream());
        writer.write(urlParameters);
        writer.flush();

        String line, outputString = "";
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                urlConn.getInputStream()));
        while ((line = reader.readLine()) != null) {
            outputString += line;
        }
        JsonObject json = (JsonObject) new JsonParser().parse(outputString);
        String access_token = json.get("access_token").getAsString();
        url = new URL(
                "https://www.googleapis.com/oauth2/v1/userinfo?access_token="
                        + access_token);
        urlConn = url.openConnection();
        outputString = "";
        reader = new BufferedReader(new InputStreamReader(
                urlConn.getInputStream()));
        while ((line = reader.readLine()) != null) {
            outputString += line;
        }
        System.out.println(outputString);