当前位置: 首页 > 知识库问答 >
问题:

为什么retryOnConnectionFailure(true)是OkHttp错误的解决方案:java.io.ioException:意外的流结束

严令秋
2023-03-14

当我发现这个的时候,我已经有一段时间了。使用swankjesse提供的解决方案后,错误消失了。我只是不明白为什么这是一个解决办法。我在网上找不到任何解释这种方法解决错误的原因的东西。

共有1个答案

栾耀
2023-03-14

此标志允许OkHttpClient在某些条件为真时多次重试请求,这意味着已知该请求是安全的。如果没有这个标志,客户端将立即返回错误,如果以及何时重试,客户端可能会返回dcide。

  private fun isRecoverable(e: IOException, requestSendStarted: Boolean): Boolean {
    // If there was a protocol problem, don't recover.
    if (e is ProtocolException) {
      return false
    }

    // If there was an interruption don't recover, but if there was a timeout connecting to a route
    // we should try the next route (if there is one).
    if (e is InterruptedIOException) {
      return e is SocketTimeoutException && !requestSendStarted
    }

    // Look for known client-side or negotiation errors that are unlikely to be fixed by trying
    // again with a different route.
    if (e is SSLHandshakeException) {
      // If the problem was a CertificateException from the X509TrustManager,
      // do not retry.
      if (e.cause is CertificateException) {
        return false
      }
    }
    if (e is SSLPeerUnverifiedException) {
      // e.g. a certificate pinning error.
      return false
    }
    // An example of one we might want to retry with a different route is a problem connecting to a
    // proxy and would manifest as a standard IOException. Unless it is one we know we should not
    // retry, we return true and try a new route.
    return true
  }

在最简单的情况下,如果我们没有开始发送请求,那么我们知道重试一定是安全的。类似地,某些响应代码,如408,表明服务器还没有开始任何工作,所以我们可以再试一次。

 类似资料:
  • 我得到意外结束流,而使用改造(2.9.0)与OkHttp3(4.9.1) 改装配置: 到目前为止,我发现了以下几点: 这个问题只发生在我使用从Windows系列操作系统(7、10、11)运行的Android Studio模拟器时——这是在来自不同网络的两台不同笔记本电脑上复制的 如果在苹果操作系统下运行Android Studio模拟器,那么在所有情况下,问题都不会再现 ARC/Postman客户

  • 我在尝试连接magento v2时遇到此错误。0.2 SOAP API。 我正在本地主机上运行 我尝试了大多数解决方案,但没有一个奏效。 安装SOAP ssl存在于php.ini文件 在文件中获取内容不返回任何内容

  • 问题内容: T_PAAMAYIM_NEKUDOTAYIM听起来真的很异国情调,但对我来说绝对是胡说八道。我将其全部追溯到以下代码行: 在构造函数中,我创建一个Config对象。这是课程: 不知道为什么这不起作用/错误是什么意思… 问题答案: T_PAAMAYIM_NEKUDOTAYIM是PHP使用的双冒号范围解析–:: 快速浏览一下您的代码,我认为这一行: 应该 第一种是静态调用方法的方式-如果$

  • 当我使应用程序使用许多库时。我通常遇到的错误是 此错误有一些原因,因为: 数函数 关于第二种情况,很难检测嵌套了什么库。 如果你对这个问题有经验,请分享给我。 更新:

  • 我是这里的初学者,这个代码在理论上应该是可行的,为你们这些很棒的家伙们帮我干杯! 13195的质因数是5、7、13、29。 600851475143的最大质因数是什么? 欧拉问题3

  • 问题内容: 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django-openid-auth,似乎已经死了 django-authopenid django-socialauth(还提供对Twitter和Facebook帐户的身份验证) django-socialregistration(也具有Fa