okhttp之OkHttpClient

转载请以链接形式标明出处:
本文出自:103style的博客


base on 3.12.0


简介

OkHttpClient是通过 builder 模式来为http请求设置相关配置。

创建单个OkHttpClient实例并将其用于所有HTTP调用时,OkHttp的性能最佳。
这是因为每个OkHttpClient都拥有自己的连接池和线程池。 重用连接和线程可减少延迟并节省内存。 相反,为每个请求创建一个OkHttpClient会浪费空闲池上的资源。

当需要多个OkHttpClient时,我们可以使用newBuilder()自定义共享的OkHttpClient实例。 这将构建共享相同连接池,线程池和配置。


OkHttpClient 相关的配置方法

默认配置
public Builder() {
   dispatcher = new Dispatcher();
   protocols = DEFAULT_PROTOCOLS;
   connectionSpecs = DEFAULT_CONNECTION_SPECS;
   eventListenerFactory = EventListener.factory(EventListener.NONE);
   proxySelector = ProxySelector.getDefault();
   if (proxySelector == null) {
       proxySelector = new NullProxySelector();
   }
   cookieJar = CookieJar.NO_COOKIES;
   socketFactory = SocketFactory.getDefault();
   hostnameVerifier = OkHostnameVerifier.INSTANCE;
   certificatePinner = CertificatePinner.DEFAULT;
   proxyAuthenticator = Authenticator.NONE;
   authenticator = Authenticator.NONE;
   connectionPool = new ConnectionPool();
   dns = Dns.SYSTEM;
   followSslRedirects = true;
   followRedirects = true;
   retryOnConnectionFailure = true;
   callTimeout = 0;
   connectTimeout = 10_000;
   readTimeout = 10_000;
   writeTimeout = 10_000;
   pingInterval = 0;
}
超时相关的方法
  • 设置call完成的超时时间 默认值为0表示无超时时间。
    • callTimeout(long timeout, TimeUnit unit)
    • callTimeout(Duration duration)
  • 设置RealConnection连接 超时时间,默认值为 10s.
    • connectTimeout(long timeout, TimeUnit unit)
    • connectTimeout(Duration duration)
  • 设置RealConnection读取 超时时间,默认值为 10s.
    • readTimeout(long timeout, TimeUnit unit)
    • readTimeout(Duration duration)
  • 设置RealConnection写入 超时时间,默认值为 10s.
    • writeTimeout(long timeout, TimeUnit unit)
    • writeTimeout(Duration duration)
  • 设置 HTTP/2web socket ping之间的间隔。默认 0 表示客户端禁用客户端启动的ping.
    • pingInterval(long interval, TimeUnit unit)
    • pingInterval(Duration duration)
配置Http连接的代理

proxy 优先与 proxySelector.

  • proxy(@Nullable Proxy proxy)
    禁用代理可使用 Proxy.NO_PROXY.

  • proxySelector(ProxySelector proxySelector)
    设置未指定proxy时的代理策略

设置执行异步请求的策略
  • dispatcher(Dispatcher dispatcher)
添加和获取可修改的拦截器
  • interceptors()
    获取可修改的拦截器列表

  • addInterceptor(Interceptor interceptor)
    添加自定义拦截器

  • networkInterceptors()
    返回可观察到单个网络请求和响应的拦截器的可修改列表。这些拦截器必须只调用一次。

  • addNetworkInterceptor(Interceptor interceptor)
    添加网络拦截器

事件响应回调监听
  • eventListener(EventListener eventListener)

  • eventListenerFactory(EventListener.Factory eventListenerFactory)

    监听请求相关的回调,如下图:
    event

重定向
  • followSslRedirects(boolean followProtocolRedirects)
  • followRedirects(boolean followRedirects)
    是否可以重定向,默认可以。
socket相关
  • socketFactory(SocketFactory socketFactory)
  • sslSocketFactory(SSLSocketFactory sslSocketFactory)
  • sslSocketFactory(SSLSocketFactory sslSocketFactory, X509TrustManager trustManager)
    设置相关的socket工厂。
证书认证相关
  • hostnameVerifier(HostnameVerifier hostnameVerifier)
    设置用于确认响应证书是否适用于 HTTPS 连接的请求主机名。
  • certificatePinner(CertificatePinner certificatePinner)
    设置证书固定器,以限制受信任的证书。
  • authenticator(Authenticator authenticator)
    设置用于响应原始服务器质询的身份验证器
  • proxyAuthenticator(Authenticator proxyAuthenticator)
    设置用于响应代理服务器质询的身份验证器
其他
  • retryOnConnectionFailure(boolean retryOnConnectionFailure)
    配置客户端连接出现问题时,是否重连。默认重连。
  • cookieJar(CookieJar cookieJar)
    设置可以接受来自传入HTTP响应的cookie的处理程序,并提供cookie传出HTTP请求。
  • cache(@Nullable Cache cache)
    设置响应缓存以用于读取和写入缓存的响应。
  • dns(Dns dns)
    设置用于查找主机名 IP 地址的 DNS 服务。
  • connectionPool(ConnectionPool connectionPool)
    设置 HTTPHTTPS 连接的连接池。
  • protocols(List<Protocol> protocols)
    配置此客户端用于与远程服务器通信的协议

以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值