Android 使用retrofit时,怎样获取响应的头信息
这个问题,我前段时间在项目中使用Retrofit遇到过,最后查到的解决办法有两种获取Response Headers的方法,第一种是直接在定义接口是让接口返回Retrofit的Response对象,在Response对象中可以获取到Headers,如:
@GET("/****act=****")
Response<SomeClass> getSomeData();
在操作Response对象时,使用response.headers();得到Headers。
这样做需要修改所有的接口,不是一个很好的办法,我在查询官方文档得到了另外一个方法,就是在构建Retrofit的APIService,在OkHttpClient中加入Interceptor,用以拦截请求和响应获取请求头和响应头。此方法可用于Retrofit2和OKHttp3.
public static OkHttpClient genericClient() {
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
//存入Session
if (response.header("Set-Cookie") != null) {
SessionManager.setSession(response.header("Set-Cookie"));
}
//刷新API调用时间
SessionManager.setLastApiCallTime(System.currentTimeMillis());
return response;
}
})
.build();
return httpClient;
}
需要注意的一点是,Interceptor必须在OkHttpClient构建时加入,OKHttpClient的interceptors()方法返回的是一个不可编辑的列表,如果对其进行修改操作,会产生UnSupportedOperationException。
Retrofit retrofit = new Retrofit.Builder()...
.build();
UserService userService = retrofit.create(UserService.class);
Call<User> call = userService.loadUser();
Response<User> response = call.execute(); okhttp3.Response okResponse = response.raw();
Headers headers = okResponse.headers();
然后你就查okhttp的api好了
Android 使用retrofit时,怎样获取响应的头信息的更多相关文章
- PHP获取客户端请求头信息
获取HTTP请求头信息 Apache 如果web服务器用的是apache,可以直接用php的库函数getallheaders() Nginx 如果web服务器用的是nginx,则无法直接使用getal ...
- 0057 Spring MVC如何获取HTTP请求头信息--URL中的动态参数--@RequestHeader--@CookieValue--@PathVariable
获取HTTP请求头信息 一个HTTP请求除了有参数和实体内容外还有HTTP请求头信息,Spring MVC也可以获取这部分信息 @RequestHeader解可以将请求头信息映射到处理方法的形参上 @ ...
- httpclient获取响应实体和信息的封装方法(解耦更新)
转自:https://blog.csdn.net/fhaohaizi/article/details/77850302 2018年07月19日更新,主要是解耦之后方法很多地方发生了变化,httpcli ...
- Android 中运行时权限获取联系人信息 Demo
代码比较简单... AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <m ...
- 获取响应状态Status信息、获取状态码Status Code
一般服务器的响应状态有以下几种: 200 正常 400 未找到页面 403 拒绝 500 服务器错误 比如我们请求bootstrap中文网, 此时的状态码是200 OK表示正常,后面的from cac ...
- java获取request的头信息
1.获取全部头信息: //get request headers private Map<String, String> getHeadersInfo() { Map<String, ...
- post请求后获取不到请求头信息的原因
在前台获取数据时,因为没有条件,所以不用传数据,用的post请求.再添加token验证时想着前端在请求时直接添加一个请求头信息就ok 没想到后台却获取不到请求头信息,打印了下日志发现是null,这是怎 ...
- php设置http请求头信息和响应头信息
php设置http请求头信息和响应头信息 设置请求服务器的头信息可以用fsockopen,curl组件,header函数只能用来设置客户端响应的头信息,不能设置服务器的头信息. 例子; 一.head ...
- 【Android端 APP 启动时长获取】启动时长获取方案及具体实施
一.什么是启动时长? 1.启动时长一般包括三种场景,分别是:新装包的首次启动时长,冷启动时长.热启动时长 冷启动 和 热启动 : (1)冷启动:当启动应用时,后台没有该程序的进程,此时启动的话系统会分 ...
随机推荐
- block的一些注意事项
1,定义block时是可以同时进行赋值的 2,block中是代码块,就是里面写的是语句,需要加分号 3,在block中,允许有多条语句 4,在带有参数的block中,声明部分参数名可以省略,但是建议写
- VB.net 捕获项目全局异常
在项目中添加如下代码:新建窗口来显示异常信息. Namespace My '全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 '添加后还需要一个From用来显示 ...
- IP地址转化为数字,charindex ,SUBSTRING
SET NOCOUNT ON; declare @I_PCity table ( IPStart nvarchar(), Area nvarchar(), CityID int, IPID int ) ...
- 关于getElementsByTagName的遍历顺序
关于getElementsByTagName的遍历顺序是怎么样的呢? getElementsByTagName的遍历顺序是从HTML的页面从上到下遍历还是按照标签的嵌套顺序层层遍历的呢? 来做个小小的 ...
- 给SearchView设置样式
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http:/ ...
- ZBrush中遮罩的概念及使用
刚接触设计软件的小伙伴有可能不知道什么叫做遮罩,遮罩的概念是什么,顾名思义,遮罩就是可以将局部进行遮挡,使用它可以锁定和保护我们不想改变的模型位置,即被遮罩的部分将不参与任何编辑. ZBrush®软件 ...
- JS判断客户端是否是iOS或者Android或者ipad(二)
js判断客户端是IPAD和iphone 多了就不说了,直接上代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 funct ...
- day20 匿名函数,内置函数,面向过程编程
目录 有名函数 匿名函数 max() min() sorted map filter 内置函数 面向过程编程 有名函数 def f1(): print('my name is f1') f1() my ...
- zabbix、agent端服务器图形化展示
[root@agent ~]# cat /etc/hostname agent.zabbix.com [root@agent ~]# cat /etc/hosts 127.0.0.1 localh ...
- day 06 数据类型的内置方法[数字类型,字符串类型]
什么是可变还是不可变? 可变是值可以改变,但是ID不变,不可变是值变,ID也变. 1.数字类型 int 1.用途:年龄,号码,等级 2.定义:可以使用int()方法将纯数字的字符串转为十进制的整数 a ...