viv*_*nam 11 java post apache-httpcomponents google-oauth
我一直在使用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
Run Code Online (Sandbox Code Playgroud)
并产生所需的结果.
但是以下在java中执行上面的POST请求会导致一些错误和响应"invalid_request"
请检查以下代码并指出这里出错:(使用Apache http组件)
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);
Run Code Online (Sandbox Code Playgroud)
试过URLEncoder.encode( param , "UTF-8")每个参数,但这也不起作用.
可能是什么原因?
jdb*_*jdb 25
你应该UrlEncodedFormEntity在帖子上使用not 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9552 次 |
| 最近记录: |