今天做项目的时候,需要在网络请求中获得header,
@Override public void onSuccess(ResponseInfo<String> responseInfo) { Header header = responseInfo.getFirstHeader("code"); Log.i("==header===", header + "");}
当我反复调用get请求方法时,发现除了第一次请求header之外,之后获得的header都为null,反复检查对比,xutils的
post请求中却没有这个问题,本来以为是接口的问题,跟服务器的哥们探讨许久都没找到问题所在,后来不断尝试,找到了
解决方案一:
在get请求传入的URL地址后面每次添加一个随机数,使得每次请求的url地址都不同,这样每次都能获得header.
但是思前想后,这样虽然是问题解决了,但是并没有找到原因所在,程序猿都有强迫症,利用抓包工具抓取请求数据的时候
发现,虽然我每次都确实发起了网络请求,但是并没有抓到任何数据!!!竟然是压根没有执行请求方法!!!那么问题来了,
返回的数据从哪里来的?经过一番套锁,终于找到了原因....Xutil底层对于get请求设置了默认的缓存机制,对于同一个
Url地址,间隔小于60秒的都直接返回上一次的成功结果,所以并没有真正的发起网络请求,更得不到我想要的header,解
放方案二如下:
HttpUtils httpUtils = new HttpUtils(10000);
// 设置缓存1秒,1秒内直接返回上次成功请求的结果。
httpUtils.configCurrentHttpCacheExpiry(1000);
可以根据自己的需求设置缓存失效间隔,也可以设置为0,这里我设置的1秒,至此完美解决.