与代理服务器一起使用时,大请求 body 的 Netty 握手超时
Netty handshake timeout for large request body when used with proxy server
我正在调用具有巨大 body(html) 的电子邮件营销服务。 body的大小=117184。
我正在使用以 Netty 作为背景的 AsyncHttpClient。
当我直接调用请求时,它是成功的,但是当我尝试使用内部 https 代理服务器时,它失败并出现以下异常。但是带有代理服务器的小型 body 工作正常。以下是 Scala 代码:
val client = asyncHttpClient(config().setProxyServer(proxyServer("XX-XYXY-100X.XXXX.local", 8080)))
val whenResponse = client.preparePost("https://api.sendgrid.com/v3/mail/send")
.addHeader("Authorization", "Bearer XXXXXXXXX")
.addHeader("Content-Type", "application/json")
.setBody(randomBody)
.execute
.get(1000, TimeUnit.SECONDS)
基本上:
- 大 body 并且没有代理服务器:工作正常。
- 小 body 有和没有代理服务器:工作正常。
- 大型 body 代理服务器:不起作用。
对于使用代理服务器的大 body 请求,我看到以下异常。
Exception in thread "main" java.util.concurrent.ExecutionException: javax.net.ssl.SSLException: handshake timed out
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1915)
at org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:207)
at send.RequestSender$.send1(RequestSender.scala:27)
at send.RequestSender$.delayedEndpoint$send$RequestSender(RequestSender.scala:47)
at send.RequestSender$delayedInit$body.apply(RequestSender.scala:14)
at scala.Function0.apply$mcV$sp(Function0.scala:34)
at scala.Function0.apply$mcV$sp$(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App.$anonfun$main$adapted(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:389)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at send.RequestSender$.main(RequestSender.scala:14)
at send.RequestSender.main(RequestSender.scala)
Caused by: javax.net.ssl.SSLException: handshake timed out
at io.netty.handler.ssl.SslHandler.handshake(...)(Unknown Source)
我已经报告了这个问题:https://github.com/AsyncHttpClient/async-http-client/issues/1559
他们的开发人员很快就解决了这个问题。
升级到 2.5.2 以上的版本可以解决这个问题
我正在调用具有巨大 body(html) 的电子邮件营销服务。 body的大小=117184。
我正在使用以 Netty 作为背景的 AsyncHttpClient。
当我直接调用请求时,它是成功的,但是当我尝试使用内部 https 代理服务器时,它失败并出现以下异常。但是带有代理服务器的小型 body 工作正常。以下是 Scala 代码:
val client = asyncHttpClient(config().setProxyServer(proxyServer("XX-XYXY-100X.XXXX.local", 8080)))
val whenResponse = client.preparePost("https://api.sendgrid.com/v3/mail/send")
.addHeader("Authorization", "Bearer XXXXXXXXX")
.addHeader("Content-Type", "application/json")
.setBody(randomBody)
.execute
.get(1000, TimeUnit.SECONDS)
基本上:
- 大 body 并且没有代理服务器:工作正常。
- 小 body 有和没有代理服务器:工作正常。
- 大型 body 代理服务器:不起作用。
对于使用代理服务器的大 body 请求,我看到以下异常。
Exception in thread "main" java.util.concurrent.ExecutionException: javax.net.ssl.SSLException: handshake timed out
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1915)
at org.asynchttpclient.netty.NettyResponseFuture.get(NettyResponseFuture.java:207)
at send.RequestSender$.send1(RequestSender.scala:27)
at send.RequestSender$.delayedEndpoint$send$RequestSender(RequestSender.scala:47)
at send.RequestSender$delayedInit$body.apply(RequestSender.scala:14)
at scala.Function0.apply$mcV$sp(Function0.scala:34)
at scala.Function0.apply$mcV$sp$(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App.$anonfun$main$adapted(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:389)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at send.RequestSender$.main(RequestSender.scala:14)
at send.RequestSender.main(RequestSender.scala)
Caused by: javax.net.ssl.SSLException: handshake timed out
at io.netty.handler.ssl.SslHandler.handshake(...)(Unknown Source)
我已经报告了这个问题:https://github.com/AsyncHttpClient/async-http-client/issues/1559
他们的开发人员很快就解决了这个问题。
升级到 2.5.2 以上的版本可以解决这个问题