类型为 Authorization = bearer token 的 GET 请求的 401 未授权错误
401 unauthorized error for GET request with type Authorization = bearer token
我正在使用 "Authorization" 作为 header 附加不记名令牌发出 HttpGet 请求。我一直收到 401 未授权错误。
我试过改造,但没有用,所以我恢复到基本的 HTTP 客户端。然后经过大量研究发现DefaultHttp存在一些错误。所以我改成了HTTPUrlConnection。即使做了所有这些,我仍然收到未经授权的 401 错误。我在这里可能做错什么?因为这个错误仍然存在,我决定坚持使用 HTTPUrlConnection 或 DefaultHTTP 并远离图书馆。
这是我使用 HttpUrlConnection 的代码
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection)
obj.openConnection();
con.setRequestMethod("GET");
String authString = "Bearer" + accessToken;
con.setRequestProperty("Authorization", authString);
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String inputLine;
response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
} else {
System.out.println("GET request not worked");
}
这是我的 DefaultHttp 请求
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGetRequest = new HttpGet(url);
httpGetRequest.addHeader("Authorization","Bearer"+accessToken);
try {
HttpResponse response = client.execute(httpGetRequest);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new
InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
}
在 Bearer
cus 之后添加一个空格,因为它表示您将 Bearer
与标记作为一个字符串连接
请使用快速 Android 网络库非常易于使用,您可以在 5 分钟内实现您的逻辑。所以请至少尝试一下。下面是 link 到图书馆:
https://github.com/amitshekhariitbhu/Fast-Android-Networking
问题已解决。我尝试使用 retrofit 和 defaultHttpClient 但由于某些 cookie 问题,两者都对我不起作用。但是使用 OKHttpClient 很简单,我能够访问服务器并获得响应。
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(mURL)
.addHeader("Authorization", String.format("Bearer %s", bearerToken))
.build();
Response response = client.newCall(request).execute();
return response.body().string();
我正在使用 "Authorization" 作为 header 附加不记名令牌发出 HttpGet 请求。我一直收到 401 未授权错误。
我试过改造,但没有用,所以我恢复到基本的 HTTP 客户端。然后经过大量研究发现DefaultHttp存在一些错误。所以我改成了HTTPUrlConnection。即使做了所有这些,我仍然收到未经授权的 401 错误。我在这里可能做错什么?因为这个错误仍然存在,我决定坚持使用 HTTPUrlConnection 或 DefaultHTTP 并远离图书馆。
这是我使用 HttpUrlConnection 的代码
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection)
obj.openConnection();
con.setRequestMethod("GET");
String authString = "Bearer" + accessToken;
con.setRequestProperty("Authorization", authString);
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // success
BufferedReader in = new BufferedReader(new InputStreamReader(
con.getInputStream()));
String inputLine;
response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
} else {
System.out.println("GET request not worked");
}
这是我的 DefaultHttp 请求
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGetRequest = new HttpGet(url);
httpGetRequest.addHeader("Authorization","Bearer"+accessToken);
try {
HttpResponse response = client.execute(httpGetRequest);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new
InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
}
在 Bearer
cus 之后添加一个空格,因为它表示您将 Bearer
与标记作为一个字符串连接
请使用快速 Android 网络库非常易于使用,您可以在 5 分钟内实现您的逻辑。所以请至少尝试一下。下面是 link 到图书馆:
https://github.com/amitshekhariitbhu/Fast-Android-Networking
问题已解决。我尝试使用 retrofit 和 defaultHttpClient 但由于某些 cookie 问题,两者都对我不起作用。但是使用 OKHttpClient 很简单,我能够访问服务器并获得响应。
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(mURL)
.addHeader("Authorization", String.format("Bearer %s", bearerToken))
.build();
Response response = client.newCall(request).execute();
return response.body().string();