2013-02-25 52 views
7

मैं जावा के साथ 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 

और आवश्यक परिणाम पैदा करता है।
लेकिन जावा में ऊपर पोस्ट अनुरोध के निम्नलिखित कार्यान्वयन कुछ त्रुटि और में "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 का उपयोग करना चाहिए पोस्ट पर पैरामीटर नहीं। यह आपके लिए 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

इससे मदद मिली !!!! –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^