【发布时间】:2020-12-20 10:14:35
【问题描述】:
我正在从一个 Android 应用程序发送一个 GET 请求,其中包括 AUTHORIZATION 标头。 当我在服务器上检查 auth.password 时,它被截断了。 原始字符串 60 个字符,服务器仅接收 48 个字符。 密码是一个散列字符串
下面是生成请求的函数的代码。
private String getToken(username, password){
InputStream inputStream = null;
String result = "";
try {
// create HttpClient
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet= new HttpGet(url);
String credentials= "";
if (username.length != 0 && password.length != 0) ){
credentials= username + ":"+ password
}else {
return "";
}
String encoding= Base64.encodeToString(credentials.getBytes("utf-8"),Base64.DEFAULT);
httpGet.setHeader(HttpHeaders.HOST,SERVER);
httpGet.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding);
// make GET request to the given URL
HttpResponse httpResponse = httpclient.execute(httpGet);
// receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
// convert inputstream to string
if(inputStream != null) {
result = convertInputStreamToString(inputStream);
result = new JSONObject(result).getString("token");
}
} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
result= "";
}
return result;
}
将变量编码解码回字符串为我提供了原始凭据
Log.e(TAG, "getToken: DECODED BYTES"+ new String(Base64.decode(encoding,0),"utf-8") );
从 Postman 发送相同的请求不会截断密码。
示例密码$2b$12$FywsqVzLrCR1iSVDLe7eBeK/.K07JUXX9YEHklyWPz9W7/nj52Xfa
服务器应用程序是用python编写的
【问题讨论】:
-
您介意在您的问题中添加 JAVA 版本吗?另外,请求中所有标头的总大小?
-
JAVA 版本 >> openjdk 版本 "1.8.0_202-release" 。我不知道该怎么做,但是我的请求除了默认的 + AUTHORIZATION 标头之外没有任何其他标头
-
明白了。由于 postman+JAVA 似乎在为您做正确的事情,但 android+JAVA 并没有……我怀疑问题不在于 JAVA 端点,而在于您的 android 应用程序发送的内容。你可以发布一些代码吗?还是您的问题已经存在?
标签: java android http-headers authorization