我正在尝试使用Android中的改装(改装:2.3.0)调用一个安静的API,并且API调用来自Postman和iOS,但不适用于Android。 Apis工作正常,不使用JWT授权标头(Bearer auth_token),如login&注册API,但当我尝试使用Authorization标头时,它返回403禁止。我在登录和注册响应时也得到了cookie标题。
这是我的代码;
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
final Call<GetUserResponse> response = apiService.getUserInformation(ConstantUtils.TOKEN_PREFIX + sharedPreferences.getString(ConstantUtils.PREF_TOKEN, ""));
response.enqueue(new Callback<GetUserResponse>() {
@Override
public void onResponse(Call<GetUserResponse> call, retrofit2.Response<GetUserResponse> rawResponse) {
try {
if (rawResponse.code() == 200 && rawResponse.body() != null) {
saveUserModelInSharedPreferences(rawResponse.body());
stopSelf();
} else if (rawResponse.code() == 401) {
// we will have to call login api here
CallLoginApiIfFails callLoginApiIfFails = new CallLoginApiIfFails(GetUserDataService.this, GET_USER_DATA);
callLoginApiIfFails.OnApiFailDueToSessionListener(GetUserDataService.this);
}
} catch (Exception e) {
e.printStackTrace();
stopSelf();
}
}
@Override
public void onFailure(Call<GetUserResponse> call, Throwable throwable) {
stopSelf();
}
});
和这个改造界面;
@GET("user")
Call<GetUserResponse>
getUserInformation(@Header("Authorization") String token);
Api客户端
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(ConstantUtils.BASE_URL)
.client(okClient())
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
,错误日志是;
Response{protocol=http/1.1,
code=403, message=Forbidden,
url=http://pointters-api-dev3.us-east-1.elasticbeanstalk.com:9000/user/setting}