2012-09-28 94 views
2

在oauth2 dance的第1步之后,我可以在重定向URL中检索代码。这工作正常。但随后,Stocktwits API - AuthorizationCodeGrant HttpResponseException:400 Bad Request

我有一个 'com.google.api.client.http.HttpResponseException:400错误的请求' 的错误

试图让accessTokenResponse。任何想法为什么?

AuthorizationCodeGrant request = new AuthorizationCodeGrant(new NetHttpTransport(), 
           new JacksonFactory(), 
           OAuth2ClientCredentials.ACCESS_TOKEN_URL, 
           OAuth2ClientCredentials.CLIENT_ID, 
           OAuth2ClientCredentials.CLIENT_SECRET, 
           code, 
           OAuth2ClientCredentials.REDIRECT_URI); 

         try { 
          AccessTokenResponse accessTokenResponse = request.execute(); 
          CredentialStore credentialStore = new SharedPreferencesCredentialStore(prefs); 
          credentialStore.write(accessTokenResponse); 
         } catch (IOException e) { 
          Log.e(TAG, "error= "+e); 
          e.printStackTrace(); 
         } 

这是触发错误的行:

AccessTokenResponse accessTokenResponse = request.execute(); 

我使用 'com.google.api.client.auth.oauth2.draft10.AccessTokenRequest.AuthorizationCodeGrant'

我应该使用别人吗?任何建议?

+0

您可以尝试手动请求授权令牌并返回代码并查看是否有效。有关示例,请参阅http://stocktwits.com/developers/docs/api#oauth-token-docs。 – AdamB

回答

1

请参阅authorization flowoauth/token end-point的第5步。

好像你缺少了grant_type。

+0

然后我不能使用AuthorizationCodeGrant(因为它不需要TOKEN_GRANT_TYPE)。你会建议使用什么呢?我想知道你是否对外部图书馆有任何偏好? – Hubert

+0

您可以尝试手动或通过命令行上的curl来获取access_token,或者甚至在客户端执行操作(如果其他所有操作都失败)。 –

1

这看起来是工作:

// Create a new HttpClient and Post Header 
         HttpClient httpclient = new DefaultHttpClient(); 
         HttpPost httppost = new HttpPost(OAuth2ClientCredentials.ACCESS_TOKEN_URL); 

         try { 
          // Add your data 
          List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5); 
          nameValuePairs.add(new BasicNameValuePair("client_id", OAuth2ClientCredentials.CLIENT_ID)); 
          nameValuePairs.add(new BasicNameValuePair("client_secret", OAuth2ClientCredentials.CLIENT_SECRET)); 
          nameValuePairs.add(new BasicNameValuePair("code", code)); 
          nameValuePairs.add(new BasicNameValuePair("grant_type", OAuth2ClientCredentials.TOKEN_GRANT_TYPE)); 
          nameValuePairs.add(new BasicNameValuePair("redirect_uri", OAuth2ClientCredentials.REDIRECT_URI)); 
          httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

          Log.i(TAG, "httppost= "+inputStreamToString(httppost.getEntity().getContent())); 

          // Execute HTTP Post Request 
          HttpResponse response = httpclient.execute(httppost); 
          Log.i(TAG, "response= "+inputStreamToString(response.getEntity().getContent())); 

         } catch (ClientProtocolException e) { 
          Log.e(TAG, "error= "+e); 
         } catch (IOException e) { 
          Log.e(TAG, "error= "+e); 
         } 

重定向URL包含访问令牌,我需要。

+0

很高兴你知道了,一旦你有grant_type在那里工作。 –