gpt4 book ai didi

android - 使用 Volley POST 请求获取 Twitter 授权 token

转载 作者:行者123 更新时间:2023-11-30 01:40:47 30 4
gpt4 key购买 nike

我正在尝试使用 Volley POST 请求为仅适用于 Twitter 应用程序的授权 token 生成正确的请求,但我不断收到 Http 400 响应(错误请求)。

这是我试过的:

网址

private static final String TWITTER_API_AUTH_URL = "https://api.twitter.com/oauth2/token";

对消费者 key 和消费者 secret 进行编码

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

我还尝试扩展 JsonObjectRequestJsonRequest 而不是 StringRequest,结果相同。

有人可以帮助确定请求有什么问题吗?

最佳答案

我刚刚使用您在评论中提供的凭据进行了测试。它使用以下 logcat 输出(我截断了真实访问 token 的内容)

I/onResponse: {"access_token":"AAAAAAAAAAAAAAAAAAAAAIwbjgAAAAAAGVMKCDU9taD0ke3sStAyA2WKszs%3DA4nfnpLTF31YuE.............JFtKjrTQC1K","token_type":"bearer"}

我的代码:

            final RequestQueue queue = Volley.newRequestQueue(this);
final String url = "https://api.twitter.com/oauth2/token";
final String requestBody = "grant_type=client_credentials";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, requestBody, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("onResponse", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("onErrorResponse", error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
// Basic Authentication
//String auth = "Basic " + Base64.encodeToString(CONSUMER_KEY_AND_SECRET.getBytes(), Base64.NO_WRAP);
String auth = "Basic cjMzZXVWeG5ZSDN3NjJ1RUdhV1NtcDAzYzpDa0h5Q3N1ZXF5ZXVobTExWURnTmpKMUZWRFN6OEk5TDFXWXJVUTFQWTNPZTcxcWlGdQ==";
headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
headers.put("Authorization", auth);
return headers;
}
};
queue.add(jsonObjectRequest);

关于android - 使用 Volley POST 请求获取 Twitter 授权 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34532773/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com