问题标签 [apache-httpasyncclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
227 浏览

java - 如何提供创建不验证 SSL 证书的 CloseableHttpPipeliningClient?

我正在尝试将 Apache HttpAsyncClient 与 HTTP 流水线支持一起使用。我想添加一个信任所有 SSL 策略,类似于这里讨论的忽略 Apache HttpClient 4.3 中的 SSL 证书(以及其他一些地方)。但我看不到任何使用自定义 SSLContext 获取流水线客户端构建器的方法:该HttpAsyncClients.createPipelining()方法不返回构建器,并且HttpAsyncClients.custom()构建器不构建ClosableHttpPipeliningClient

0 投票
0 回答
102 浏览

rest - apache的RequestConfig和IOReactorConfig有什么区别?

我正在寻找一种在 HttpAsyncClients 中设置自定义超时的方法,谷歌搜索给了我两种方法——使用 RequestConfig 或 IOReactorConfig。两者看起来很相似,我找不到太多关于它们是什么的解释。

0 投票
1 回答
1101 浏览

java - HttpAsyncClient 和多线程 Jsoup 连接类有区别吗?

我正在用 Java 实现一个网络爬虫。在对要抓取的网站进行了一些操作之后,我想使用 Java 中并发 HTTP 连接的最佳实践。我目前正在使用Jsoup 的连接方法。我想知道是否可以创建线程并在这些线程中建立连接,类似于HttpAsyncClient

0 投票
1 回答
893 浏览

java - 忽略 AsyncClientHttp2Multiplexing 中的自签名证书

我正在尝试使用单个客户端端点创建多个异步 HTTP 连接我已经尝试过Apache 站点中给出的多路复用示例

代码片段如下,

此示例适用于具有有效证书的站点,但如果我想尝试证书已过期/自签名的站点,则会引发以下异常

javax.net.ssl.SSLHandshakeException: 一般 SSLEngine 问题 javax.net.ssl.SSLHandshakeException: 一般 SSLEngine 问题在 sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478) 在 sun.security.ssl.SSLEngineImpl.checkTaskThrown( SSLEngineImpl.java:535) 在 sun.security.ssl.SSLEngineImpl.writeAppRecord(SSLEngineImpl.java:1214) 在 sun.security.ssl.SSLEngineImpl.wrap(SSLEngineImpl.java:1186) 在 javax.net.ssl.SSLEngine.wrap (SSLEngine.java:469) 在 org.apache.hc.core5.reactor.ssl.SSLIOSession.doWrap(SSLIOSession.java:256) 在 org.apache.hc.core5.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java :294) 在 org.apache.hc.core5.reactor.InternalDataChannel.onIOEvent(InternalDataChannel.java:112) 在 org.apache.hc.core5.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:502) 在 org.org.apache.hc.core5.reactor.SingleCoreIOReactor.processEvents(SingleCoreIOReactor.java:173) 中的 org.apache.hc.core5.reactor 中的 apache.hc.core5.reactor.InternalChannel.handleIOEvent(InternalChannel.java:50)。 SingleCoreIOReactor.doExecute(SingleCoreIOReactor.java:123) at org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(AbstractSingleCoreIOReactor.java:80) at org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.java: 44) 在 java.lang.Thread.run(Thread.java:748) 引起:javax.net.ssl.SSLHandshakeException: 一般 SSLEngine 问题在 sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 在 sun .security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728) 在 sun.security.ssl.Handshaker.fatalSE(Handshaker.java:304) 在 sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) 在 sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1514) 在 sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 在 sun.security.ssl.Handshaker.processLoop(Handshaker.java :1026) 在 sun.security.ssl.Handshaker$1.run(Handshaker.java:966) 在 sun.security.ssl.Handshaker$1.run(Handshaker.java:963) 在 java.security.AccessController.doPrivileged(Native Method ) 在 sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1416) 在 org.apache.hc.core5.reactor.ssl.SSLIOSession.doRunTask(SSLIOSession.java:274) 在 org.apache.hc。 core5.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:331) ... 8 更多原因:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在 sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) 在 sun.security.validator 的 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) 上找到请求目标的有效认证路径。 Validator.validate(Validator.java:260) 在 sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) 在 sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:281) 在 sun.security.ssl .X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136) 在 sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1501) ... 16 更多原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效sun.security.provider.certpath 中请求目标的认证路径。SunCertPathBuilder.build(SunCertPathBuilder.java:141) 在 sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) 在 java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 在 sun.security .validator.PKIXValidator.doBuild(PKIXValidator.java:392) ... 22 更多

我尝试过的:我创建了一个信任所有证书的套接字工厂,并尝试在 connectionManager 中进行设置,但它创建了一个 CloseableHttpClient,我认为它不能用于异步多路复用,代码如下

请让我知道是否有任何方法或解决方法可以忽略 MinimalHttpAsyncClient 中的自签名证书。

0 投票
2 回答
590 浏览

java - HTTP2 url 在浏览器中成功加载,但在 httpclient5 中失败

我正在尝试创建一个 httpclient 5 示例,该示例使用 asynchttpclient(异步多路复用)加载 URL 我已将 tomcat 9 配置为使用 conf/server.xml 配置接受 http2 协议,如下所示

我的程序如下,

tomcat 配置在使用 h2 协议在 borwser 中加载页面时工作,但它在 httpclient 5 中失败,并出现以下异常

对此的任何帮助将不胜感激

提前致谢

在启用 tomcat 日志时,我可以看到以下内容,

org.apache.coyote.AbstractProtocol$ConnectionHandler.process 无法为协商协议创建处理器 [h2c]

当我将客户端代码更新到 java 9 时,即使这个问题也得到了解决,但是有可能使它与 java 8 一起工作。

ps:我知道 java 8 不支持 ALPN,但如果有什么方法可以让它与 java 8 一起工作,请告诉我。

0 投票
1 回答
444 浏览

java - 使用 HTTP2 和 SSL 的 httpclient5 出错(java.io.IOException:现有连接被远程主机强行关闭)

我正在编写一个使用 HttpClient 5.0 beta 的客户端来请求/加载支持 HTTP2 的 Tomcat 中的安全 URL/资源。程序如下。它取自 Apache httpclient 5 示例(除了使用 loadTrustMaterial 创建 SSL 上下文的方式外,代码完全相同)

运行代码时出现以下异常。

如果我没有在 H2RequesterBootstrap 上将设置版本策略设置为 HttpVersionPolicy.FORCE_HTTP_2,它可以工作,但在这种情况下它使用 HTTP/1.1。但我只能使用 HTTP2。

只是为了检查一下,我用 Jetty 的 HTTP2 客户端试了一下,它工作正常。但我只能使用 Apache HttpClient 5.0。

你能帮忙吗?谢谢。

0 投票
0 回答
570 浏览

java - 从 CloseableHttpAsyncClient 获取 Gziped 内容

我正在一个目前只需要使用 apache hc 库的环境中工作。进一步来说,

虽然我正在尝试使用 CloseableHttpAsyncClient 的实例作为 Spring 的 AsyncRestTemplate 的客户端。我编写了以下示例来尝试从本地服务器获取 gzip 压缩的内容。

我可以使用httpie验证服务器是否支持压缩响应,如下所示。

现在,当我尝试使用 CloseableHttpAsyncClient 的示例代码阅读时,它并不能很清楚地工作。即使在添加了 ResponseInterceptor 之后,我也需要解压缩 gzip 内容。

decompress 是我编写的一个用于解压缩的小实用程序。

现在我期望的是EntityUtils.toString(httpResponse.getEntity())应该直接以字符串形式返回我未压缩的响应,但它没有,我必须手动解压缩内容。我怀疑解压是 GzipDecompressingEntity 的工作,但由于某种原因它不能很好地发挥作用(可能是因为响应被分块了吗?)

有没有一种方法可以通过GzipDecompressingEntity正确使用或手动以异步方式进行解压缩以异步方式进行解压缩,以便当我这样做时future.get()它具有未压缩的响应?

0 投票
0 回答
266 浏览

java - Apache HttpAsyncClient 读取响应?

}

我对使用 Apache Http Async 客户端的代码有以下疑问

  1. reactor 与 NpoolingConnectionManager 的作用是什么。
  2. 目前,响应体是从post请求的流中读取的。而不是使用NIO或非阻塞方式读取响应体。是不是正确的方式。
0 投票
1 回答
1594 浏览

java - RequestConfig 和 IOReactorConfig 的超时设置有什么区别?

我正在使用 Apache HTTP 异步客户端,我必须对其进行一些配置。

我有以下代码,但是在设置时我很困惑RequestConfigIOReactorConfig因为您可以为它们指定超时配置。

我的问题是:这两个配置之间的超时有什么区别?它是双重工作,我可以只设置其中一个配置吗?或者,这两个 Config 的超时控制的是不同的东西?

0 投票
1 回答
840 浏览

apache-httpclient-4.x - 使用 Apache Async http 客户端时只需要响应流

我正在使用 Apache Async Http 客户端从 Azure 存储下载大文件。

这是我正在使用的示例代码->

但这是在调用完成回调之前将文件存储在本地缓冲区中。

我尝试使用 AsyncByteConsumer ->

这对我也不起作用。我收到以下错误 -> java.lang.IllegalStateException: Content has not been provided

我想要的只是获取我将传递给我的客户的响应流,以便他们可以使用流直接下载文件。

编辑 1 ->

所以我扩展了 AbstractAsyncResponseConsumer 来编写我自己的消费者 ->

这是我用来执行http请求的代码

我得到这个输出->

onEntityEnclosed 。

java.io.IOException:基础输入流返回零字节。

一旦我收到返回响应的状态和标头的 onResponseReceived 回调,我就会完成响应的未来。

我认为应该发生的是 onContentReceived 回调将在一个单独的线程中调用,该线程会将缓冲区数据写入流,我的调用者线程可以在单独的线程中读取它。