【发布时间】:2016-04-04 14:52:30
【问题描述】:
我正在尝试使用 Volley POST 请求为仅限 Twitter 应用程序的授权令牌生成正确的请求,但我不断收到 Http 400 响应(错误请求)。
这是我尝试过的:
网址
private static final String TWITTER_API_AUTH_URL = "https://api.twitter.com/oauth2/token";
对消费者密钥和消费者秘密进行编码
try {
byte[] data = (URLEncoder.encode(TWITTER_CONSUMER_KEY, "UTF-8") + ":" + URLEncoder.encode(TWITTER_CONSUMER_SECRET, "UTF-8")).getBytes("UTF-8");
mEncodedKeyAndSecret = Base64.encodeToString(data, Base64.DEFAULT);
} catch (UnsupportedEncodingException e) {
//handleError
}
自定义 Volley StringRequest
private class TokenRequestWithAuthHeader extends StringRequest{
public TokenRequestWithAuthHeader (int method, String url, Response.Listener listener, Response.ErrorListener errorListener)
{
super(method, url, listener, errorListener);
}
@Override
public Map getHeaders() throws AuthFailureError {
Map headers = new HashMap();
headers.put("Content-Length", String.valueOf(getBody().length));
headers.put("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
headers.put("Authorization", "Basic " + mEncodedKeyAndSecret);
return headers;
}
@Override
public byte[] getBody() {
return ("grant_type=client_credentials").getBytes();
}
}
发送请求
tokenRequest = new TokenRequestWithAuthHeader
(Request.Method.POST, TWITTER_API_AUTH_URL, mCallback.getTokenResponseListener(), mCallback);
requestQueue.add(tokenRequest);
Documentation about Application-Only authentication at dev.twitter.com
我还尝试扩展JsonObjectRequest 和JsonRequest 而不是StringRequest,结果相同。
有人可以帮助确定请求的问题吗?
【问题讨论】:
-
您在使用Postman之类的工具时有没有收到成功的回复?
-
我在 www.hurl.it 上生成了一个请求,其中包含我在 LogCat 中打印出来的编码基本身份验证标头,该标头是从我上面使用的相同代码生成的,使用相同的内容类型标头,并得到了预期 200 成功响应。我很困惑:)
-
如果只是为了测试或学习,能否贴出 TWITTER_CONSUMER_KEY 和 TWITTER_CONSUMER_SECRET 或者编码的 Basic 身份验证标头以便我们检查?
-
当然,这里是:基本 cjMzZXVWeG5ZSDN3NjJ1RUdhV1NtcDAzYzpDa0h5Q3N1ZXF5ZXVobTExWURnTmpKMUZWRFN6OEk5TDFXWXJVUTFQWTNPZTcxcWlGdQ==
标签: android twitter oauth-2.0 android-volley