(新葡京注册) 在Android中使用retrofit时,怎样获取响应的头信息
澳门新葡京
澳门新葡京
当前位置 : 澳门新葡京 > 新葡京注册

(新葡京注册) 在Android中使用retrofit时,怎样获取响应的头信息

找了下它的源码,也没有发现怎样能获取响应的头信息

参考这个issue https://github.com/square/retrofit/issues/444

如果不切换到2.0,暂时只能用Response直接得到raw的返回获取

这个问题,我前段时间在项目中使用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  
                .addInterceptornew Interceptor {  
                    @Override  
                    public Response interceptChain chain throws IOException {  
                       Response response = chain.proceedchain.request;
                        //存入Session
                        if response.header"Set-Cookie" != null {
                            SessionManager.setSessionresponse.header"Set-Cookie";
                        }
                        //刷新API调用时间
                        SessionManager.setLastApiCallTimeSystem.currentTimeMillis;
                        
                        return response;
                    }  
  
                }  
                .build;  
  
        return httpClient;  
    }  

需要注意的一点是,Interceptor必须在OkHttpClient构建时加入,OKHttpClient的interceptors方法返回的是一个不可编辑的列表,如果对其进行修改操作,会产生UnSupportedOperationException。

Retrofit retrofit = new Retrofit.Builder...
                                .build;

UserService userService = retrofit.createUserService.class;
Call<User>     call     = userService.loadUser;
Response<User> response = call.execute;

okhttp3.Response okResponse = response.raw;
Headers headers             = okResponse.headers;

然后你就查okhttp的api好了

栏目列表

广告位

澳门新葡京