今天接一个设备对外接口时,遇到了重定向问题。起因是在PostMan上跑接口一点问题都没有,但是在程序中就是死活不行。错误提示401未授权unauthorized。拦截OkHttp的请求日志发下日志打印了一个新的地址,发现是重定向的问题。
重定向:发起请求时,被请求的接口重新指向另外一个路径,导致401无法访问。我们用同样的参数去请求新指向的接口能够暂时的成功访问,但是不排除原接口重新定位其他接口的可能。
final HashMap<String,String> headers=new HashMap<>();
headers.put("Authorization","Bearer c.eQBOOWuOAbqoTA713DDxOfoxahXB6DqmY8iQmFT0tSWcLlnZEBlkbv3KQRgLRr6slD9R4UoSCsScuAVrCfarBlVyRSZKSZp1MbWvhVsrwLtLoo9SU9JoeJ56Hf3GCBG1iIbJExVQduDtaKOX");
OkHttpUtil.getInstance().asynGet("https://developer-api.nest.com",headers, new OkHttpUtil.ResultCallBack() {
@Override
public void successListener(okhttp3.Call call, Response response) {
switch (response.code()){
case 200:
break;
case 401:
OkHttpUtil.getInstance().asynGet(String.valueOf(response.request().url()),headers, new OkHttpUtil.ResultCallBack() {
@Override
public void successListener(Call call, Response response) {
try {
Log.i("wsy","code="+response.code()+
"\nbody="+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void failListener(Call call, IOException e) {
}
});
break;
}
}
@Override
public void failListener(okhttp3.Call call, IOException e) {
Log.i(TAG,"error--"+e.getLocalizedMessage());
}
});
}
处理方法其实很简单,判断401Code,通过response.request().url()
拿到重定向后的地址再次访问就可以了。OkHttpUtil是笔者自己封装的简单工具类,需要的朋友可以去笔者的Github上获取,顺便打个star谢谢。
wusyLibrary——OkHttpUtil