okhttp之OkHttpClient

2022-12-19 13:39:33 浏览数 (2)

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


base on 3.12.0


简介

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

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

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


OkHttpClient 相关的配置方法

默认配置
代码语言:javascript复制
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) 监听请求相关的回调,如下图:
重定向
  • 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) 配置此客户端用于与远程服务器通信的协议

以上

0 人点赞