2013-02-25 6 views
7

Ho lavorato su Google OAuth 2.0 con java e sono stato colpito da un errore sconosciuto durante l'implementazione.
Il seguente CURL per la richiesta POST funziona bene:Cosa c'è di sbagliato con questa implementazione di richieste 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 

e produce il risultato desiderato.
Ma la seguente implementazione di sopra richiesta POST in java provoca qualche errore e la risposta in "invalid_request"
Controllare il seguente codice ed il punto che cosa va male qui: (fatto uso di Apache HTTP-componenti)

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

provato con URLEncoder.encode(param , "UTF-8") per ogni parametro ma anche questo non funziona.
Quale potrebbe essere la causa?

risposta

16

Si dovrebbe usare UrlEncodedFormEntity non impostareParameter sul post. Gestisce anche l'intestazione Content-Type: application/x-www-form-urlencoded.

+0

Questo ha aiutato !!!! –