2013-02-25 24 views
7

Tôi đã làm việc trên Google OAuth 2.0 với java và bị tấn công với một số lỗi không xác định trong quá trình triển khai.
Các CURL sau đây để yêu cầu POST hoạt động tốt:Điều gì xảy ra với việc triển khai yêu cầu POST này?

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 

Và tạo ra kết quả theo yêu cầu.
Nhưng việc thực hiện sau đây yêu cầu POST trên trong java gây ra một số lỗi và các phản ứng trong "invalid_request"
Kiểm tra mã và điểm sau whats đi sai ở đây: (đã sử dụng Apache http-linh kiện)

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); 

thử với URLEncoder.encode(param , "UTF-8") cho mỗi thông số nhưng điều đó cũng không hoạt động.
Nguyên nhân có thể là gì?

Trả lời

16

Bạn nên sử dụng UrlEncodedFormEntity không đặt tham số trên bài đăng. Nó cũng xử lý tiêu đề Content-Type: application/x-www-form-urlencoded cho bạn.

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

Điều đó đã giúp !!!! –

Các vấn đề liên quan