21

私は Java を使用して Google OAuth 2.0 に取り組んできましたが、実装中に不明なエラーが発生しました。
次の POST リクエストの CURL は正常に機能します。

curl -v -k --header "Content-Type: application/x-www-form-urlencoded" --data "code=4%2FnKVGy9V3LfVJF7gRwkuhS3jbte-5.Arzr67Ksf-cSgrKXntQAax0iz1cDegI&client_id=[my_client_id]&client_secret=[my_client_secret]&redirect_uri=[my_redirect_uri]&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token

そして、必要な結果を生成します。
しかし、Java で上記の POST リクエストを次のように実装すると、いくつかのエラーが発生し"invalid_request"
、次のコードを確認して、ここで何が問題なのかを指摘してください:(Apache http-components を使用)

HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/token");
HttpParams params = new BasicHttpParams();
params.setParameter("code", code);
params.setParameter("client_id", client_id);
params.setParameter("client_secret", client_secret);
params.setParameter("redirect_uri", redirect_uri);
params.setParameter("grant_type", grant_type);
post.addHeader("Content-Type", "application/x-www-form-urlencoded");
post.setParams(params);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(post);

各パラメーターで試してみましURLEncoder.encode( param , "UTF-8")たが、それも機能しません。
原因は何ですか?

4

2 に答える 2

44

UrlEncodedFormEntity投稿では setParameter を使用しないでください。ヘッダーも処理Content-Type: application/x-www-form-urlencodedします。

HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/token");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("code", code));
nvps.add(new BasicNameValuePair("client_id", client_id));
nvps.add(new BasicNameValuePair("client_secret", client_secret));
nvps.add(new BasicNameValuePair("redirect_uri", redirect_uri));
nvps.add(new BasicNameValuePair("grant_type", grant_type));

post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(post);
于 2013-02-25T09:47:52.633 に答える