2012-07-04 1 views
0

Привет я пытаюсь создать приложение GAE/J, в котором я должен получить маркер доступа от данного кодаInvalid грант в OAuth2 в GAE Java appp

так вот мой код/​​oauth2callback сервлета

public class OAuth2Callback extends HttpServlet{ 

    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException { 
    String url = "https://accounts.google.com/o/oauth2/token"; 

     // FetchOptions opt = FetchOptions.Builder.doNotValidateCertificate(); 
      URL url1=new URL(url); 
      String param="grant_type=authorization_code&code="+req.getParameter("code")+"&client_id=anonymouns&client_secret=anonymous&redirect_uri=https://www.cloudspokestest.appspot.com/oauth2callback"; 

    HttpURLConnection connection = 
     (HttpURLConnection)url1.openConnection(); 
      connection.setDoOutput(true); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); 
      connection.getOutputStream().write(param.getBytes()); 
      InputStream str= connection.getInputStream(); 
      BufferedReader reader=new BufferedReader(new InputStreamReader(str)); 
     String l=""; 
      while((l=reader.readLine())!=null){ 
       resp.getWriter().println(l); 

      } 


    } 

} 

, но на экране браузера я получаю сообщение об ошибке недействительной с кодом ответа 400.can any one please help, как удалить эту ошибку.

ответ

0

Вы получаете эту ошибку, скорее всего, потому что значения параметров в вашем URL-адресе не кодируются по URL-адресу. Значение redirect_uri и, возможно, значение code должно быть закодировано по URL-адресу.

Вы можете использовать java.net.URLEncoder для кодирования значений.

Также никогда не используйте getBytes() на String, так как он использует кодировку символов по умолчанию вашей платформы для преобразования символов в байты. Запуск того же кода на другом компьютере или изменение конфигурации вашего компьютера может привести к другому результату. Вместо этого всегда используйте getBytes(charsetname).

+0

BTW, то же самое относится к 'new InputStreamReader (str)'. Это также будет использовать кодировку по умолчанию для преобразования байтов в символы. Вместо этого используйте 'new InputStreamReader (str, charsetname)'. – Tom

Смежные вопросы