0

こんにちは私は与えられたコードからアクセストークンを取得する必要があるGAE/Jアプリを作成しようとしています

これが/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のエラー無効付与が表示されます。このエラーを削除する方法を教えてください。

4

1 に答える 1

0

このエラーが発生する可能性が最も高いのは、URL のパラメーター値が URL エンコードされていないためです。の値、redirect_uri場合によっては の値codeも URL エンコードする必要があります。

java.net.URLEncoder を使用して値をエンコードできます。

またgetBytes()、プラットフォームのデフォルトの文字エンコーディングを使用して文字をバイトに変換するため、文字列では使用しないでください。別のマシンで同じコードを実行するか、マシンの構成を変更すると、異なる出力が得られる場合があります。常にgetBytes(charsetname)代わりに使用してください。

于 2012-07-04T13:47:10.910 に答える