okhttp——1.基本使用及概要

okhttp基本使用及概要

github地址
官网地址

特性:

  1. socket复用 (同一个主机共享一个socket)
  2. 结果缓存减少重复请求
  3. 支持透明的gzip压缩

http/https协议栈

创建client

OkHttpClient httpsClient = new OkHttpClient.Builder()
                    .protocols(Collections.singletonList(Protocol.HTTP_1_1))
                    .connectTimeout(timeOut, TimeUnit.MILLISECONDS)
                    .readTimeout(timeOut, TimeUnit.MILLISECONDS)
                    .build();

上面为基本的okhttp的创建方式,当然还有很多其它的高级点的设置,下面介绍几个:

// 业务可以自己实现dns接口,okhttp内部有默认实现,无超时逻辑,可能出现dns解析几十秒的问题(dns为树形结构如果查询不到则会逐级查询直到根域名服务器,整个过程非常耗时。出现过一个bug当解析ip+端口号的错误域名时耗时可以达几十秒级别)
// 所以建议自己实现dns接口,设置一个超时时间
public Builder dns(Dns dns)
// 域名校验接口(只有https需要设置,在ssl握手阶段,如果url域名与服务器的域名不匹配时,会交给HostnameVerifier接口判断是否进行连接)
public Builder hostnameVerifier(HostnameVerifier hostnameVerifier)
// 可以设置SocketFactory,用于创建Socket
public Builder socketFactory(SocketFactory socketFactory)

// 对于https的连接创建Factory可以用如下方法
public Builder sslSocketFactory(SSLSocketFactory sslSocketFactory)
// 是否支持重定向,默认为支持
Builder followRedirects(boolean followRedirects)
// 连接失败后是否重连: 默认在 特定场景下回重连(如一个host有多个ip,一个ip失败会尝试另一个)
public Builder retryOnConnectionFailure(boolean retryOnConnectionFailure)
// 添加网络拦截器
Builder addNetworkInterceptor(Interceptor interceptor)

// 请求拦截器
Builder addInterceptor(Interceptor interceptor)
// 用于监控请求的每个阶段,可以做 端到端监控,监控每个接口统计耗时
Builder eventListener(EventListener eventListener)

除以上接口外还可以设置 Dispatch(线程管理)、代理、自定义连接池等,功能很强大

构造请求

请求构造比较简单,具体可参考如下:

Request request = new Request.Builder()
                    .url(url)
                    .post(data)
                    .headers(Headers.of(headerParams))
                    .build();

同步请求

Response response = client.newCall(request).execute()

异步请求

Response response = client.newCall(request).enqueue(Callback responseCallback)

请求流程


)

// https 中ssl过程
SSLSocketFactory

参考:
https://www.jianshu.com/p/9deec36f2759

posted @ 2021-11-06 15:41  NeilZhang  阅读(567)  评论(0编辑  收藏  举报