gpt4 book ai didi

java - 从http请求android获取内容,内容格式错误

转载 作者:行者123 更新时间:2023-12-01 19:45:41 25 4
gpt4 key购买 nike

我正在尝试使用 OAuth2 方法连接到 Twitter API 以获取不记名 token 。我正在使用 AsyncTask 调用 Twitter。我的请求似乎被接受并返回错误代码200,但是当我尝试读取应该包含我想要的 token 的内容时,但格式和内容都很奇怪- 响应的长度。

我是按照这个link构建的.

这是我用来发出请求的AsyncTask:

private class RequestBearerTockenTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... string) {

// On récupère les keys passées en paramètre
String consumerKey = string[0];
String secretKey = string[1];

// On encode en base64 le bearerToken en accord avec la doc twitter
String base64encodedBearerToken = Base64.encodeToString((consumerKey + ":" + secretKey).getBytes(), Base64.NO_WRAP);

// Variables locales de la fonction
String bearerTocken = "";
URL url = null;
HttpURLConnection urlConnection = null;

try {
// On formate la requete HTTP
url = new URL("https://api.twitter.com/oauth2/token");
urlConnection = (HttpURLConnection) url.openConnection();

urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("Host", "api.twitter.com");
urlConnection.setRequestProperty("User-Agent", " My Twitter App v1.0.23");
urlConnection.setRequestProperty("Authorization", "Basic " + base64encodedBearerToken);
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
urlConnection.setRequestProperty("Content-Length", "29");
urlConnection.setRequestProperty("Accept-Encoding", "gzip");

String requestBody = "grant_type=client_credentials";
byte[] outputInBytes = requestBody.getBytes("UTF-8");
OutputStream os = urlConnection.getOutputStream();
os.write( outputInBytes );
os.close();

// On lit l'entete de la reponse
int responseCode = urlConnection.getResponseCode();

switch (responseCode) {
case 200:
case 201:

BufferedReader rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
bearerTocken += line;
}
break;
default:
bearerTocken = "";
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bearerTocken;
}
}

最后的 bearerToken 如下:

����������������V*��N͋/�,HU�RJJM,J-R�QJLNN-.�K�����/�rW03��5��+81��$���=?[��)�ɱ���B�إа�2�)+����$�2�� ����?���?7�;�0�2�995=�-=/$$�"�30T�����������9�뇛������

内容长度为 149,而不是文档中的 140。

您知道为什么我会收到这样的回复吗?

最佳答案

如果您不解码/处理 gzip 压缩,为什么要使用它?内容以 gzip 编码。在使用之前,您需要对其进行解码。我建议您在调用 API 时不要使用该编码。删除代码行 urlConnection.setRequestProperty("Accept-Encoding", "gzip"); ,一切都应该可以工作。

关于java - 从http请求android获取内容,内容格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59127580/

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