OkHttp 源码浅析二

这篇具有很好参考价值的文章主要介绍了OkHttp 源码浅析二。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OkHttp 配置参数:

 @get:JvmName("dispatcher") val dispatcher: Dispatcher = builder.dispatcher

  @get:JvmName("connectionPool") val connectionPool: ConnectionPool = builder.connectionPool

  /**
   * Returns an immutable list of interceptors that observe the full span of each call: from before
   * the connection is established (if any) until after the response source is selected (either the
   * origin server, cache, or both).
   */
  @get:JvmName("interceptors") val interceptors: List<Interceptor> =
      builder.interceptors.toImmutableList()

  /**
   * Returns an immutable list of interceptors that observe a single network request and response.
   * These interceptors must call [Interceptor.Chain.proceed] exactly once: it is an error for
   * a network interceptor to short-circuit or repeat a network request.
   */
  @get:JvmName("networkInterceptors") val networkInterceptors: List<Interceptor> =
      builder.networkInterceptors.toImmutableList()

  @get:JvmName("eventListenerFactory") val eventListenerFactory: EventListener.Factory =
      builder.eventListenerFactory

  @get:JvmName("retryOnConnectionFailure") val retryOnConnectionFailure: Boolean =
      builder.retryOnConnectionFailure

  @get:JvmName("authenticator") val authenticator: Authenticator = builder.authenticator

  @get:JvmName("followRedirects") val followRedirects: Boolean = builder.followRedirects

  @get:JvmName("followSslRedirects") val followSslRedirects: Boolean = builder.followSslRedirects

  @get:JvmName("cookieJar") val cookieJar: CookieJar = builder.cookieJar

  @get:JvmName("cache") val cache: Cache? = builder.cache

  @get:JvmName("dns") val dns: Dns = builder.dns

  @get:JvmName("proxy") val proxy: Proxy? = builder.proxy

  @get:JvmName("proxySelector") val proxySelector: ProxySelector =
      when {
        // Defer calls to ProxySelector.getDefault() because it can throw a SecurityException.
        builder.proxy != null -> NullProxySelector
        else -> builder.proxySelector ?: ProxySelector.getDefault() ?: NullProxySelector
      }

  @get:JvmName("proxyAuthenticator") val proxyAuthenticator: Authenticator =
      builder.proxyAuthenticator

  @get:JvmName("socketFactory") val socketFactory: SocketFactory = builder.socketFactory

  private val sslSocketFactoryOrNull: SSLSocketFactory?

  @get:JvmName("sslSocketFactory") val sslSocketFactory: SSLSocketFactory
    get() = sslSocketFactoryOrNull ?: throw IllegalStateException("CLEARTEXT-only client")

  @get:JvmName("x509TrustManager") val x509TrustManager: X509TrustManager?

  @get:JvmName("connectionSpecs") val connectionSpecs: List<ConnectionSpec> =
      builder.connectionSpecs

  @get:JvmName("protocols") val protocols: List<Protocol> = builder.protocols

  @get:JvmName("hostnameVerifier") val hostnameVerifier: HostnameVerifier = builder.hostnameVerifier

  @get:JvmName("certificatePinner") val certificatePinner: CertificatePinner

  @get:JvmName("certificateChainCleaner") val certificateChainCleaner: CertificateChainCleaner?

  /**
   * Default call timeout (in milliseconds). By default there is no timeout for complete calls, but
   * there is for the connect, write, and read actions within a call.
   */
  @get:JvmName("callTimeoutMillis") val callTimeoutMillis: Int = builder.callTimeout

  /** Default connect timeout (in milliseconds). The default is 10 seconds. */
  @get:JvmName("connectTimeoutMillis") val connectTimeoutMillis: Int = builder.connectTimeout

  /** Default read timeout (in milliseconds). The default is 10 seconds. */
  @get:JvmName("readTimeoutMillis") val readTimeoutMillis: Int = builder.readTimeout

  /** Default write timeout (in milliseconds). The default is 10 seconds. */
  @get:JvmName("writeTimeoutMillis") val writeTimeoutMillis: Int = builder.writeTimeout

  /** Web socket and HTTP/2 ping interval (in milliseconds). By default pings are not sent. */
  @get:JvmName("pingIntervalMillis") val pingIntervalMillis: Int = builder.pingInterval

  /**
   * Minimum outbound web socket message size (in bytes) that will be compressed.
   * The default is 1024 bytes.
   */
  @get:JvmName("minWebSocketMessageToCompress")

dispatcher 用于线程调度

connectionPool 连接池  64 个or 5 host 可以提升复用性 方便管理和提升性能

interceptors 

networkInterceptors

eventListenerFactory 事件监听器 连接建立 发送head body 等

retryOnConnectionFailure 连接 / 请求 失败是否重置

authenticator 自动认证修正 比如 401 无权限访问等 可以用于刷新token 

followRedirects 是否继续重定向 

followSslRedirects 在followRedirects 开启时 协议切换时 是否继续重定向  比如http 切换https 默认true 文章来源地址https://www.toymoban.com/news/detail-661161.html

cookieJar 存储器 存储cookie 默认是空实现
cache 本地缓存
dns 域名系统 域名解析为ip 函数为 lookup getAllByName List inntAddress 通过域名返回IPList---InetAddress.getAllByName(hostName)
proxy 代理 转发  代理服务器 代理多种方式 还有反向代理 类型 DIRECT 直连 HTTP SOCKS,默认NO_PROXY
proxySelector 判断是否代理 通过select 方法 返回List<Proxy> 
proxyAuthenticator 如果代理不可用 需要授权 需要验证机制
socketFactory http请求本质是java socket 通过socketFactory  创建
sslSocketFactory ssl 请求, tls ssl 加密 连接
x509TrustManager 证书验证器,通过证书和签名进行验证 ,X509 证书格式
connectionSpecs List 连接标准 规范,https 连接 客户端 发送tls 连接 的规范 比如连接套件 非对称加密等,ConnectionSpec 类定义各种规范比如 RESTRICTED_TLS支持TLS 1.3 1.2 ,MODERN_TLS1.3 1.2 ,COMPATIBLE_TLS 支持 1.3  1.2 1.1 1.0,CLEARTEXT 明文 传输https 报文 不用tls
protocols List, 支持协力的版本号 比如 1.0 , 1.1, SPDY2,SPDY3 ,HTTP2 最好使用加密 h2c ,H2_PRIOR 非加密,
hostnameVerifier: 验证合法性 域名 只验证第一个 [0] 
certificatePinner:加强验证,可以配置证书 hash 
certificateChainCleaner:=== 证书验证相关 操作X509
callTimeoutMillis 超时
connectTimeoutMillis 连接超时
readTimeoutMillis 读取超时
writeTimeoutMillis 写入超时
pingIntervalMillis 心跳机制  websocket / http2 使用

到了这里,关于OkHttp 源码浅析二的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • okhttp源码简单流程分析

    拦截器详细解析可以看大佬简书 \\\"https://www.jianshu.com/p/6fac73f7570f\\\"和 “https://www.jianshu.com/p/3c740829475c” okhttp请求流程 1:OkHttpClient okHttpClient = new OkHttpClient.Builder() 构建一个okhttpClient对象,传入你想传入的对象,不传就是默认的; 2:构建request对象 Request request = new Request.Builder(

    2024年02月12日
    浏览(32)
  • Android OkHttp源码阅读详解一

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家 👉点击跳转到教程 前言:源码阅读基于okhttp:3.10.0 Android中OkHttp源码阅读二(责任链模式) 1、首先回顾OkHttp的使用 2、OkHttp源码阅读之线程池详解 3、守护线程详解 4、根据OkHttp中构

    2024年02月10日
    浏览(39)
  • Android OkHttp源码分析--分发器

    OkHttp是当下Android使用最频繁的网络请求框架,由Square公司开源。Google在Android4.4以后开始将源码中 的HttpURLConnection底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。 OKHttp优点: 1、支持Http1、Http2、Quic以及WebSocket; 2、连接池复用底层TCP(Socket),减少请求

    2024年02月13日
    浏览(41)
  • Android Okhttp3 分发器源码解析

    在 OkHttp 中,分发器(Dispatcher)是负责调度和执行网络请求的组件。它 管理 着 并发 的 请求数量 以及请求的 优先级 ,确保合理地使用底层的连接池和线程池,从而 提高 网络请求的 效率 和 性能 。 默认情况下,OkHttp 使用一个单例的分发器,它可以处理同时进行的最大请求

    2024年02月12日
    浏览(46)
  • 深入浅出 OkHttp 源码解析及应用实践

    作者:vivo 互联网服务器团队- Tie Qinrui OkHttp 在 Java 和 Android 世界中被广泛使用,深入学习源代码有助于掌握软件特性和提高编程水平。 本文首先从源代码入手简要分析了一个请求发起过程中的核心代码,接着通过流程图和架构图概括地介绍了OkHttp的整体结构,重点分析了拦

    2024年02月05日
    浏览(58)
  • Android中OkHttp源码阅读二(责任链模式)

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家 👉点击跳转到教程 Android OkHttp源码阅读详解一 一、首先写一个案例熟悉责任链模式 1、定义一个抽象类BaseTask 2、定义四个Task类,都继承自BaseTask,这里只写一个其它三个同理

    2024年02月10日
    浏览(34)
  • SpringBoot 整合okHttp3 okhttp3用法 okhttp整合 okhttp用法 SpringBoot 整合okHttp3

    GET 请求需要传递 application/json 参数 上述代码中,通过创建ConnectionPool对象,并将其设置到OkHttpClient中,从而启用了连接池功能。ConnectionPool的构造函数接受三个参数:maxIdleConnections、keepAliveDuration和timeUnit,用于配置连接池的最大空闲连接数、连接保持时间以及时间单位。 连

    2024年02月15日
    浏览(44)
  • okhttp下载文件 Java下载文件 javaokhttp下载文件 下载文件 java下载 okhttp下载 okhttp

    示例 http客户端 用的是 okhttp,也可以用 UrlConnetcion或者apache okhttp官网 也可以下载 okhttp jar方式引入 1.1、okhttp发起请求官网Demo 3.1读写内容

    2024年02月12日
    浏览(43)
  • com.squareup.okhttp3:okhttp 组件安全漏洞及健康度分析

    维护者 square组织 许可证类型 Apache License 2.0 首次发布 2016 年 1 月 2 日 最新发布时间 2023 年 4 月 23 日 GitHub Star 44403 GitHub Fork 9197 依赖包 5,582 依赖存储库 77,217 com.squareup.okhttp3:okhttp 一个开源的 HTTP 客户端库,可以用于 Android 和 Java 应用程序。它提供了一种简单而强大的方式来发

    2024年02月10日
    浏览(26)
  • web3j 引用报错:okhttp3.RequestBody okhttp3.RequestBody.create(java.lang.String, okhttp3.MediaType)解决

    在做区块链开发时引用了web3j,而web3j中又引用了OKhttp,在程序发起请求时报错如下 我项目中引用的web3j包如下 其实具体web3j哪个版本感觉都有类似问题,我尝试过4.6.3版本到5.0.0都会报上述错。然后看项目依赖发现引用的OKhttp版本是3.14.9,网上说要将OKhttp版本号更换到4.3.1以上

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包