扫码关注官方订阅号
找了下它的源码,也没有发现怎样能获取响应的头信息
认证高级PHP讲师
参考这个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() .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好了
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
参考这个issue https://github.com/square/retrofit/issues/444
如果不切换到2.0,暂时只能用Response直接得到raw的返回获取
这个问题,我前段时间在项目中使用Retrofit遇到过,最后查到的解决办法有两种获取Response Headers的方法,第一种是直接在定义接口是让接口返回Retrofit的Response对象,在Response对象中可以获取到Headers,如:
在操作Response对象时,使用response.headers();得到Headers。
这样做需要修改所有的接口,不是一个很好的办法,我在查询官方文档得到了另外一个方法,就是在构建Retrofit的APIService,在OkHttpClient中加入Interceptor,用以拦截请求和响应获取请求头和响应头。此方法可用于Retrofit2和OKHttp3.
需要注意的一点是,Interceptor必须在OkHttpClient构建时加入,OKHttpClient的interceptors()方法返回的是一个不可编辑的列表,如果对其进行修改操作,会产生UnSupportedOperationException。
然后你就查okhttp的api好了