2013-02-25 4 views
7

저는 Java로 Google OAuth 2.0을 사용하고 있으며 구현 중에 알 수없는 오류가 발생했습니다.이 POST 요청 구현의 문제점은 무엇입니까?

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 

을 그리고 필요한 결과를 생성 :
POST 요청에 대한 다음 CURL 잘 작동합니다.
그러나 자바 위의 POST 요청의 다음 구현이 몇 가지 오류가 다음 코드와 포인트가 무슨 잘못 여기가는 "invalid_request"
확인에 응답을 발생합니다 (아파치 만들어 사용 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); 

으로 시도 각 매개 변수에 대해 URLEncoder.encode(param , "UTF-8")이지만 작동하지 않습니다.
원인은 무엇입니까?

답변

16

게시물에 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); 
+0

그게 도움이 !!!! –