有没有办法设置ssl握手超时时间

问题描述

我正在使用SttpClient库发出请求。我的请求有时可能会花费很长时间,因此我将读取超时更改如下:

def get(url: String): Future[String] = {
    val request = basicRequest.get(Uri(new URI(url)))
    request.readTimeout(2.minutes).send()
    ...
}

但是我仍然遇到以下异常:

sttp.client.SttpClientException $ ConnectException:java.net.ConnectException:握手在10000毫秒后超时 在sttp.client.SttpClientException $ .defaultExceptionToSttpClientException(SttpClientException.scala:31)〜[core_2.12-2.2.4.jar:2.2.4] 在sttp.client.asynchttpclient.AsyncHttpClientBackend。$ anonfun $ adjustExceptions $ 1(AsyncHttpClientBackend.scala:343)〜[async-http-client-backend_2.12-2.2.4.jar:2.2.4] 在sttp.client.SttpClientException $$ anonfun $ adjustExceptions $ 1.applyOrElse(SttpClientException.scala:59)〜[core_2.12-2.2.4.jar:2.2.4] 在sttp.client.SttpClientException $$ anonfun $ adjustExceptions $ 1.applyOrElse(SttpClientException.scala:58)〜[core_2.12-2.2.4.jar:2.2.4] 在scala.concurrent.Future。$ anonfun $ recoverWith $ 1(Future.scala:417)〜[scala-library-2.12.12.jar:na] 在scala.concurrent.impl.Promise。$ anonfun $ transformWith $ 1(Promise.scala:41)〜[scala-library-2.12.12.jar:na] 在scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)〜[scala-library-2.12.12.jar:na] 在java.util.concurrent.ForkJoinTask $ RunnableExecuteAction.exec(ForkJoinTask.java:1402)〜[na:1.8.0_265] 在java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)〜[na:1.8.0_265] 在java.util.concurrent.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1056)〜[na:1.8.0_265] 在java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)〜[na:1.8.0_265] 在java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)〜[na:1.8.0_265] 由以下原因引起:java.net.ConnectException:握手在10000ms之后超时 在org.asynchttpclient.netty.channel.NettyConnectListener.onFailure(NettyConnectListener.java:179)〜[async-http-client-2.12.1.jar:na] 在org.asynchttpclient.netty.channel.NettyConnectListener $ 1.onFailure(NettyConnectListener.java:151)〜[async-http-client-2.12.1.jar:na] 在org.asynchttpclient.netty.SimpleFutureListener.operationComplete(SimpleFutureListener.java:26)〜[async-http-client-2.12.1.jar:na] 在io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:570)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:549)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:608)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:117)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.handler.ssl.SslHandler $ 5.run(SslHandler.java:2020)〜[netty-handler-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:472)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)〜[netty-transport-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.SingleThreadEventExecutor $ 4.run(SingleThreadEventExecutor.java:989)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.internal.ThreadExecutorMap $ 2.run(ThreadExecutorMap.java:74)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)〜[netty-common-4.1.48.Final.jar:4.1.48.Final] 在java.lang.Thread.run(Thread.java:748)〜[na:1.8.0_265] 造成原因:io.netty.handler.ssl.SslHandshakeTimeoutException:握手在10000毫秒后超时 在io.netty.handler.ssl.SslHandler $ 5.run(SslHandler.java:2017)〜[netty-handler-4.1.48.Final.jar:4.1.48.Final] ...省略了9个常见框架

我可以看到SslHandler有一个 setHandshakeTimeout 方法,可以在其中更改此值,但是有什么方法可以通过SttpClient库访问它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)