Android使用retrofit时,怎样获取响应的头信息

但使书种多,会有岁稔时。这篇文章主要讲述Android使用retrofit时,怎样获取响应的头信息相关的知识,希望能为你提供帮助。
【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好了

    推荐阅读