介绍
OKHttpClient对应于应用层,采用Builder模式,
继承Cloneable 可以Clone
继承Call.Factory 发起HTTP协议请求
继承WebSocket.Factory 发起WebSocket协议请求
HTTP连接与WebSocket连接的区别可以简单的理解:HTTP是非持久的,半全功的,即客户端主动,服务端被动式响应,WebSocket则是持久的,双全功的连接,即客户端与服务端都可主动的连接。
源码解读
OKHttpClient源码大体可以整理成四个部分
这一个部分并没有什么可以总结的地方,采用了Builder模式
Builder模式可以简单理解为当一个类的构建逻辑非常复杂,并且可能构建过程中有一定的约束条件时,采用该模式将其构建逻辑转移到了实例化过程。想要了解更多的内容可以查看《Java设计模式》
简单使用
OkHttpClient.Builder builder=new OkHttpClient.Builder();
builder.retryOnConnectionFailure(true).writeTimeout(3,TimeUnit.SECONDS);
OkHttpClient client=builder.build();
扩展
添加Cookie
OkHttp3实现Cookies管理及持久化
使用SharedPreferences做Cookie持久化,二级缓存获取Cookie,
//更新保存Cookie,一般App中我们会在登陆或者注册中更新保存
public void saveFromResponse(HttpUrl url, List<cookies>) {}
//定制Cookie的加载策略,比如过滤不传递cookie的url
public List loadForRequest(HttpUrl url) {}
添加授权
builder.authenticator(new Authenticator() {
@Nullable
@Override
public Request authenticate(Route route,okhttp3.Response response) throws IOException {
//建议使用摘要认证
return response.request().newBuilder().header("username","password").build();}
});