从Android连接到twitter API的Oauth2(仅应用程序身份验证)

从Android连接到twitter API的Oauth2(仅应用程序身份验证),android,twitter,Android,Twitter,我有一个Android应用程序,可以显示一个特定用户的Twitter响应。自从升级到API的1.1版以来,我一直在尝试让OAUTH2应用程序的纯身份验证工作,但是当我发送使用者密钥和密码时,我得到了错误400响应 代码如下-如有任何帮助,将不胜感激 HttpClient httpclient = new DefaultHttpClient(); uriString = "https://api.twitter.com/oauth2/token"; HttpPost httppost = new

我有一个Android应用程序,可以显示一个特定用户的Twitter响应。自从升级到API的1.1版以来,我一直在尝试让OAUTH2应用程序的纯身份验证工作,但是当我发送使用者密钥和密码时,我得到了错误400响应

代码如下-如有任何帮助,将不胜感激

HttpClient httpclient = new DefaultHttpClient();
uriString = "https://api.twitter.com/oauth2/token";
HttpPost httppost = new HttpPost(uriString);
HttpParams httpParams = httppost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 15000);

String base64EncodedString =null;
try {
   String encodedConsumerKey = URLEncoder.encode("twitter_consumer_key","UTF-8");
   String encodedConsumerSecret = URLEncoder.encode("twitter_consumer_secret","UTF-8");
   String authString = encodedConsumerKey +":"+encodedConsumerSecret;
   base64EncodedString = Base64.encodeToString(authString.getBytes("UTF-8"), Base64.DEFAULT);
} catch (Exception ex) {
   //do nothing for now...
}

httppost.setHeader(AUTHORIZATION, "Basic " + base64EncodedString);
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
HttpResponse response =null;

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();        
nameValuePairs.add(new BasicNameValuePair("grant_type", "client_credentials"));        
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));        
response = httpclient.execute(httppost);            

statusCode = response.getStatusLine().getStatusCode();
HttpClient-HttpClient=newdefaulthttpclient();
uriString=”https://api.twitter.com/oauth2/token";
HttpPost HttpPost=新的HttpPost(URI字符串);
HttpParams HttpParams=httppost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams,10000);
HttpConnectionParams.setSoTimeout(httpParams,15000);
字符串base64EncodedString=null;
试一试{
字符串encodedConsumerKey=URLEncoder.encode(“twitter\u consumer\u key”,“UTF-8”);
字符串encodedConsumerSecret=URLEncoder.encode(“twitter\u consumer\u secret”,“UTF-8”);
字符串authString=encodedConsumerKey+“:”+encodedConsumerSecret;
base64EncodedString=Base64.encodeToString(authString.getBytes(“UTF-8”),Base64.DEFAULT);
}捕获(例外情况除外){
//现在什么都不要做。。。
}
httppost.setHeader(授权,“基本”+base64EncodedString);
setHeader(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
HttpResponse响应=null;
List nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“授予类型”、“客户端凭据”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs,“UTF-8”);
response=httpclient.execute(httppost);
statusCode=response.getStatusLine().getStatusCode();

看起来问题在于将字符串重新编码到Base64-我需要Base64.NO\u WRAP而不是Base64.DEFAULT,因为这会在两行上抛出字符串

HttpClient httpclient = new DefaultHttpClient();
uriString = "https://api.twitter.com/oauth2/token";
HttpPost httppost = new HttpPost(uriString);
HttpParams httpParams = httppost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 15000);

String base64EncodedString =null;
try {
   String encodedConsumerKey = URLEncoder.encode("twitter_consumer_key","UTF-8");
   String encodedConsumerSecret = URLEncoder.encode("twitter_consumer_secret","UTF-8");
   String authString = encodedConsumerKey +":"+encodedConsumerSecret;
   base64EncodedString = Base64.encodeToString(authString.getBytes("UTF-8"), Base64.NO_WRAP); //Changed here!!!
} catch (Exception ex) {
   //do nothing for now...
}

httppost.setHeader(AUTHORIZATION, "Basic " + base64EncodedString);
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
HttpResponse response =null;

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();        
nameValuePairs.add(new BasicNameValuePair("grant_type", "client_credentials"));        
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));        
response = httpclient.execute(httppost);            

statusCode = response.getStatusLine().getStatusCode();
HttpClient-HttpClient=newdefaulthttpclient();
uriString=”https://api.twitter.com/oauth2/token";
HttpPost HttpPost=新的HttpPost(URI字符串);
HttpParams HttpParams=httppost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams,10000);
HttpConnectionParams.setSoTimeout(httpParams,15000);
字符串base64EncodedString=null;
试一试{
字符串encodedConsumerKey=URLEncoder.encode(“twitter\u consumer\u key”,“UTF-8”);
字符串encodedConsumerSecret=URLEncoder.encode(“twitter\u consumer\u secret”,“UTF-8”);
字符串authString=encodedConsumerKey+“:”+encodedConsumerSecret;
base64EncodedString=Base64.encodeToString(authString.getBytes(“UTF-8”),Base64.NO_WRAP);//在此处更改!!!
}捕获(例外情况除外){
//现在什么都不要做。。。
}
httppost.setHeader(授权,“基本”+base64EncodedString);
setHeader(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
HttpResponse响应=null;
List nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“授予类型”、“客户端凭据”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs,“UTF-8”);
response=httpclient.execute(httppost);
statusCode=response.getStatusLine().getStatusCode();

看起来问题在于将字符串重新编码到Base64-我需要Base64.NO\u WRAP而不是Base64.DEFAULT,因为这会在两行上抛出字符串

HttpClient httpclient = new DefaultHttpClient();
uriString = "https://api.twitter.com/oauth2/token";
HttpPost httppost = new HttpPost(uriString);
HttpParams httpParams = httppost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 15000);

String base64EncodedString =null;
try {
   String encodedConsumerKey = URLEncoder.encode("twitter_consumer_key","UTF-8");
   String encodedConsumerSecret = URLEncoder.encode("twitter_consumer_secret","UTF-8");
   String authString = encodedConsumerKey +":"+encodedConsumerSecret;
   base64EncodedString = Base64.encodeToString(authString.getBytes("UTF-8"), Base64.NO_WRAP); //Changed here!!!
} catch (Exception ex) {
   //do nothing for now...
}

httppost.setHeader(AUTHORIZATION, "Basic " + base64EncodedString);
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
HttpResponse response =null;

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();        
nameValuePairs.add(new BasicNameValuePair("grant_type", "client_credentials"));        
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));        
response = httpclient.execute(httppost);            

statusCode = response.getStatusLine().getStatusCode();
HttpClient-HttpClient=newdefaulthttpclient();
uriString=”https://api.twitter.com/oauth2/token";
HttpPost HttpPost=新的HttpPost(URI字符串);
HttpParams HttpParams=httppost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams,10000);
HttpConnectionParams.setSoTimeout(httpParams,15000);
字符串base64EncodedString=null;
试一试{
字符串encodedConsumerKey=URLEncoder.encode(“twitter\u consumer\u key”,“UTF-8”);
字符串encodedConsumerSecret=URLEncoder.encode(“twitter\u consumer\u secret”,“UTF-8”);
字符串authString=encodedConsumerKey+“:”+encodedConsumerSecret;
base64EncodedString=Base64.encodeToString(authString.getBytes(“UTF-8”),Base64.NO_WRAP);//在此处更改!!!
}捕获(例外情况除外){
//现在什么都不要做。。。
}
httppost.setHeader(授权,“基本”+base64EncodedString);
setHeader(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
HttpResponse响应=null;
List nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“授予类型”、“客户端凭据”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs,“UTF-8”);
response=httpclient.execute(httppost);
statusCode=response.getStatusLine().getStatusCode();