-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Description
keeps getting below this error while using async-http-client.
platform: win10
async-http-client version: 3.0.2
netty version: 4.1.119.Final
openjdk version: 11 , 8, 17
core codes:
DefaultAsyncHttpClientConfig.Builder configBuilder =
new DefaultAsyncHttpClientConfig.Builder()
.setHandshakeTimeout(5000)
.setConnectionTtl(Duration.ofSeconds(25))
.setConnectTimeout(Duration.ofSeconds(10))
.setReadTimeout(Duration.ofSeconds(10))
.setRequestTimeout(Duration.ofSeconds(10))
.setSslSessionTimeout(10000)
.setMaxConnections(10000)
.setMaxConnectionsPerHost(10)
.setFollowRedirect(true)
.setMaxRedirects(3)
.setKeepAlive(true)
.setTcpNoDelay(true)
.setEnabledProtocols(new String[]{"TLSv1.2", "TLSv1.3"})
.setDisableHttpsEndpointIdentificationAlgorithm(true);
configBuilder.setSslContext(createSslContext());
configBuilder.setUseInsecureTrustManager(true);
this.httpClient = Dsl.asyncHttpClient(configBuilder);
}
private SslContext createSslContext() {
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
SslProvider sslProvider = SslContext.defaultClientProvider();
SslContextBuilder sslContextBuilder = SslContextBuilder.forClient();
sslContextBuilder.trustManager(tm);
sslContextBuilder.sslProvider(sslProvider);
try {
return sslContextBuilder.build();
} catch (SSLException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
private CompletableFuture executeGetRequest(String url) {
long startTime = System.currentTimeMillis();
return httpClient.prepareGet(url)
.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
.addHeader("access-control-allow-origin", "*")
.addHeader("referer", "https://www.quora.com/")
.addHeader("sec-fetch-dest", "document")
.addHeader("Sec-Fetch-Mode", "navigate")
.addHeader("Sec-Fetch-Site", "none")
.addHeader("sec-ch-ua", "\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"")
.addHeader("sec-ch-ua-mobile", "?0")
.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36")
.addHeader("sec-ch-ua-platform", "\"Windows\"")
.addHeader("Accept-Language", "en-US,en;q=0.9")
.addHeader("Accept-Charset", "UTF-8")
.addHeader("Cache-Control", "no-cache")
.execute()
.toCompletableFuture()
.thenApply(response -> {
long duration = System.currentTimeMillis() - startTime;
return new BatchResult(url, response.getStatusCode(),
response.getResponseBody(), duration, null);
})
.exceptionally(throwable -> {
throwable.printStackTrace();
long duration = System.currentTimeMillis() - startTime;
return new BatchResult(url, -1, null, duration, throwable.getMessage());
});
}
stack trace:
java.util.concurrent.CompletionException: java.net.ConnectException: SslHandler removed before handshake completed
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:332)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:347)
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:636)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2162)
at org.asynchttpclient.netty.NettyResponseFuture.abort(NettyResponseFuture.java:286)
at org.asynchttpclient.netty.channel.NettyConnectListener.onFailure(NettyConnectListener.java:175)
at org.asynchttpclient.netty.channel.NettyConnectListener$1.onFailure(NettyConnectListener.java:145)
at org.asynchttpclient.netty.SimpleFutureListener.operationComplete(SimpleFutureListener.java:28)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:35)
at org.asynchttpclient.netty.channel.NettyConnectListener.onSuccess(NettyConnectListener.java:123)
at org.asynchttpclient.netty.channel.NettyChannelConnector$1.onSuccess(NettyChannelConnector.java:91)
at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:28)
at org.asynchttpclient.netty.SimpleChannelFutureListener.operationComplete(SimpleChannelFutureListener.java:22)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625)
at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105)
at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:305)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:784)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.net.ConnectException: SslHandler removed before handshake completed
at org.asynchttpclient.netty.channel.NettyConnectListener.onFailure(NettyConnectListener.java:173)
... 29 more
Caused by: javax.net.ssl.SSLHandshakeException: SslHandler removed before handshake completed
at io.netty.handler.ssl.SslHandler.handlerRemoved0(SslHandler.java:718)
at io.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:272)
at io.netty.channel.AbstractChannelHandlerContext.callHandlerRemoved(AbstractChannelHandlerContext.java:1138)
at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:563)
at io.netty.channel.DefaultChannelPipeline.internalAdd(DefaultChannelPipeline.java:203)
at io.netty.channel.DefaultChannelPipeline.addFirst(DefaultChannelPipeline.java:209)
at io.netty.channel.DefaultChannelPipeline.addFirst(DefaultChannelPipeline.java:151)
at org.asynchttpclient.netty.channel.ChannelManager.addSslHandler(ChannelManager.java:435)
at org.asynchttpclient.netty.channel.NettyConnectListener.onSuccess(NettyConnectListener.java:107)
... 21 more
and here are the libs I imported:
