Retrofit2 + OkHttp3下统一设置Http请求的Headers

来源:互联网 发布:淘宝模特拍摄 编辑:程序博客网 时间:2024/05/19 14:01

近几天尝试使用Retrofit和OkHttp构建网络层,从官网配置了依赖链接后,惊奇的发现OkHttp3,Retrofit2,都与以前的版本不兼容,不仅包名不一样(OkHttp3.*,以前的版本是com.squareup.okhttp.*)而且很多方法也被删掉了,目前只有Retrofit2在网上有少许资料,OkHttp3只能参考官方文档了。

在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网上很多文章的方法真对这两个版本都不是很适用,有的给出的方法已经被删除,有的方法会报出异常 :(

在翻阅官方API文档整理后的方法如下:

[java] view plain copy print?
  1. import okhttp3.Interceptor;  
  2. import okhttp3.OkHttpClient;  
  3. import okhttp3.Request;  
  4. import okhttp3.Response;  
  5. import retrofit2.Retrofit;  
  6.   
  7. public class RetrofitAPIManager {  
  8.   
  9.     public static final String SERVER_URL = "url";  
  10.   
  11.     public static ClientAPI provideClientApi() {  
  12.         Retrofit retrofit = new Retrofit.Builder()  
  13.                 .baseUrl(SERVER_URL)  
  14.                 .client(genericClient())  
  15.                 .build();  
  16.         return retrofit.create(ClientAPI.class);  
  17.     }  
  18.   
  19.   
  20.     public static OkHttpClient genericClient() {  
  21.         OkHttpClient httpClient = new OkHttpClient.Builder()  
  22.                 .addInterceptor(new Interceptor() {  
  23.                     @Override  
  24.                     public Response intercept(Chain chain) throws IOException {  
  25.                         Request request = chain.request()  
  26.                                 .newBuilder()  
  27.                                 .addHeader("Content-Type""application/x-www-form-urlencoded; charset=UTF-8")  
  28.                                 .addHeader("Accept-Encoding""gzip, deflate")  
  29.                                 .addHeader("Connection""keep-alive")  
  30.                                 .addHeader("Accept""*/*")  
  31.                                 .addHeader("Cookie""add cookies here")  
  32.                                 .build();  
  33.                         return chain.proceed(request);  
  34.                     }  
  35.   
  36.                 })  
  37.                 .build();  
  38.   
  39.         return httpClient;  
  40.     }  
  41. }  
也就是使用Interceptor来拦截并重新设置请求头,测试可用


/**官方 doc查找记录 **/

  • OkHttp3下OkHttpClient的  List<Interceptor>  interceptors()方法,返回的是一个不可编辑的列表,如果对其进行编辑会报出UnSupportedOperationException
  • Interceptor的典型使用场景,就是对request和response的Headers进行编辑
0 0
原创粉丝点击