Retrofit2 + OkHttp3下统一设置Http请求的Headers
2016-01-18 14:14
477 查看
近几天尝试使用Retrofit和OkHttp构建网络层,从官网配置了依赖链接后,惊奇的发现OkHttp3,Retrofit2,都与以前的版本不兼容,不仅包名不一样(OkHttp3.*,以前的版本是com.squareup.okhttp.*)而且很多方法也被删掉了,目前只有Retrofit2在网上有少许资料,OkHttp3只能参考官方文档了。
在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网上很多文章的方法真对这两个版本都不是很适用,有的给出的方法已经被删除,有的方法会报出异常 :(
在翻阅官方API文档整理后的方法如下:
/**官方 doc查找记录 **/
OkHttp3下OkHttpClient的 List<Interceptor> interceptors()方法,返回的是一个不可编辑的列表,如果对其进行编辑会报出UnSupportedOperationException
Interceptor的典型使用场景,就是对request和response的Headers进行编辑
在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网上很多文章的方法真对这两个版本都不是很适用,有的给出的方法已经被删除,有的方法会报出异常 :(
在翻阅官方API文档整理后的方法如下:
import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import retrofit2.Retrofit; public class RetrofitAPIManager { public static final String SERVER_URL = "url"; public static ClientAPI provideClientApi() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(SERVER_URL) .client(genericClient()) .build(); return retrofit.create(ClientAPI.class); } public static OkHttpClient genericClient() { OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request() .newBuilder() .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") .addHeader("Accept-Encoding", "gzip, deflate") .addHeader("Connection", "keep-alive") .addHeader("Accept", "*/*") .addHeader("Cookie", "add cookies here") .build(); return chain.proceed(request); } }) .build(); return httpClient; } }也就是使用Interceptor来拦截并重新设置请求头,测试可用
/**官方 doc查找记录 **/
OkHttp3下OkHttpClient的 List<Interceptor> interceptors()方法,返回的是一个不可编辑的列表,如果对其进行编辑会报出UnSupportedOperationException
Interceptor的典型使用场景,就是对request和response的Headers进行编辑
相关文章推荐
- Http协议-HttpClient的使用
- POJ1273_Drainage Ditches(网络流)
- RCP
- 程序员常见面试之 计算机网络 知识点小结
- 完美配置Tomcat的HTTPS
- 多个SDCycleScrollView轮播图加载网络图片减少内存使用.
- 在Android中使用HttpClient 4.3.x出现NoSuchFieldError的问题
- web压力测试 - http_load
- java 网络 socket TCP / UDP / catch 语句块捕捉到异常后,继续执行语句块后面的代码
- 执行命令 ab -n 100 -c 10 http://beimeibang.com/index.php 启动ab ,向 www.beimeibang.com 发送100个请求
- Nginx 教程- 获取真实IP模块 - http_realip_module
- 基于AFNetworking3.0的网络封装
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- linuc c网络
- 圆桌问题【二分图多重匹配】网络流24题
- 深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子
- 深度学习与计算机视觉系列(8)_神经网络训练与注意点
- 陈海泉:SDN/NFV 2.0 架构的网络技术实践
- 网络安全-跨站脚本攻击XSS(Cross-Site Scripting)
- python网络爬虫知识点