问题标签 [apache-httpclient-5.x]
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.
java - 为什么 SparkJava 不处理同一连接上的第二个请求?
我使用 SparkJava 编写了一个带有 REST-API 的小型服务器。我尝试使用 Apache Httpclient 查询 REST-API。使用这个客户端,我打开一个连接并向服务器发送第一个请求并接收响应。然后我重用相同的连接向服务器发送第二个请求。请求被传输,但服务器不处理它。有谁知道,我做错了什么?
这是一个最小的工作示例:
Maven依赖:
服务器类:
客户端类:
控制台上的服务器输出:
这里是 tcpdump 的缩短输出:
此后不再记录服务器的响应。
java - httpclient5 jdk8(1.8.0_292) CloseableHttpAsyncClient 收到致命警报:protocol_version 但 CloseableHttpClient 运行良好
httpclient5 异步代码:
http5 异步日志:
我试过Apache HTTP Client 5.0 HTTP/2 POST Example 需要这个,将 jdk8 升级到 jdk8(1.8.0_292),然后安装 jce,但还是不行。真的需要一些帮助。
我也检查了这个,似乎 TLSV1.2 和 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 没问题。
apache-httpcomponents - Gzip 解压缩不适用于 Apache CachingHttpClient 版本 5.0.3
我们正在从 Apache HttpClient 4.5 迁移到 5.0.3。因为我们想做客户端http缓存,所以我们CachingHttpClientBuilder
用来设置HttpClient。使用 4.5.x 版本可以正常工作,并且 gzip 编码的响应会自动解压缩。但是,在版本 5.0.3 中,响应以未压缩的形式返回,ByteArrayEntity
并且返回的Conent-Encoding
标头丢失ByteArrayEntity
,这会阻止应用默认的 gzip 解压缩。
我错过了什么吗?这是 5.0.3 版本中的错误CachingHttpClient
吗?注意 - 我能够使用默认的 HttpClient 进行 gzip 解压缩。
如果我用默认的 HttpClient 替换上面的第一行,gzip 解压缩会按预期应用,我会得到预期的响应字符串:
根据一些调试,看起来该错误可能在CachingExec.convert()中,它从缓存条目中生成ClassicHttpResponse
带有 a的 a,并在进程中ByteArrayEntity
删除了标头。conent-encoding
android-studio - 如何打开一个持久的 http 连接,通过它我可以使用 Apache HttpClient 库从服务器连续读取输入流?
我正在使用 Apache HttpClient 库,并且正在尝试打开持久的 http 连接。有一些示例可以让我打开连接,但是我找不到任何使用某种循环来不断检查我是否从服务器接收到数据的示例。我们使用本地服务器,每次发生特定事件时通过永久连接发送消息。我不能定期发送 GET 请求,因为这会打开新的连接。
我的初始化函数:
我的 GET 请求功能:
我正在寻找一些方法来不断检查新消息。
谢谢你
apache-httpclient-4.x - HttpClient5 - 更改/删除了很多 API
我正在迁移我的应用程序以使用 HttpClient5,但它变得越来越糟糕。许多 API 被删除,并且没有适当的文档可用于了解替代方案。Stackoverflow/任何其他网站/博客总是显示与 httpcomponents4.x 相关的答案,但这些 API 在 HttpClient5 中不再存在。我把我所有的查询/替代方案都放在这里。如果有人知道,请回答/确认这些是否是正确的实现。
在客户端设置套接字超时:删除
RequestConfig.custom().setSocketTimeout(socketTimeout).build()
API。经过大量研究,发现有单独的 SocketConfig 类需要设置ConnectionManager
设置默认主机。按照这个如何在 Apache HttpClient 4.3+ 中设置默认 HttpHost 目标?并发现我们可以覆盖但我们不能在 httpclient5 中执行此操作,因为这样声明的方法
determineRoute
无法覆盖。所以我这样做了:DefaultRoutePlanner
final
HttpRequestBase
替换为HttpUriRequestBase
- 在 HttpRequestBase 上,我们调用 getRequestLine() 来了解正在打印的请求详细信息,如下所示:
POST https://url HTTPS/1.1
但是getRequestLine()
在 HttpUriRequestBase 中删除了 API,所以我这样使用:
httpReq.getMethod()+" "+httpReq.getUri()
但即使我使用它也不是打印协议httpReq.getVersion()
- 没有单独
httpasyncclient
httpcore-nio
的库HttpClient5
- 经过研究,发现所有东西都捆绑在一起httpclient5
-httpcore5
现在更多的斗争从这里开始。以下所有类不再存在。
还不知道这个的替代品。IOReactorConfig
api不清楚。在演示示例中,IOReactorConfig
设置为CloseableHttpAsyncClient
没有 SSLcontext 示例。就我而言,根据现有代码,他们正在使用IOReactorConfig
and SSLContext
。现在不知道如何俱乐部这些。
请建议我做的是否正确。
很多其他人都在那里。会更新。
java - Apache HttpClient 5 和 JDK16-NoHttpResponseException
在过去的 15 天里,我们使用 Apache HttpClient 5 发送了大约 8,000,000 个请求。问题是 8,000,000 个请求中有 81,000 个失败并导致 NoHttpResponseException。为了解决这些问题,我们已经更新到新的 JDK 并经常关闭所有空闲连接。请求到达不同的目的地,在某些情况下,尽管出现异常,它们仍会接收数据包。
你们中是否有人遇到过类似的问题并且已经找到了解决方案?
在我们目前使用的系统上:
- Apache Tomcat 9.0.31 (Debian)
- 亚马逊 Corretto 16.0.1.9.1
- org.apache.httpcomponents.core5:httpcore5 5.0.3,
- org.apache.httpcomponents.client5:httpclient5 5.0.3
apache-httpcomponents - 如何在 httpcore5 中配置块传输编码
我目前正在分别从 httpcore4.x 和 httpclient4.x 版本迁移到 httpcore5.x 和 httpclient5.x。升级时我遇到了一个代码,他们将分块传输编码设置为 true
requestEntity.setChunked(true); //requestEntity 是 AbstractHttpEntity 的实例
当我签入最新的 httpcore 版本时,我找不到 AbstractHttpEntity 类的 setChunked 方法。
有什么方法可以在最新的 httpcore 版本中设置这个布尔分块值?请帮忙..
提前致谢
spring-ws - Spring Web 服务和 Apache HttpClient5
我们正在研究从 Apache httpcomponents/client 从 4.5 升级到 5.1,因为我们想从 HTTP 1.1 升级到 HTTP 2。
客户端可以升级,但我们也使用 Spring WS (3.1.1)。这需要一个带有
这个 HttpComponentsMessageSender 本身需要一个 HttpClient 但我不能在那里注入新的 HttpClient,因为 API 不兼容。
由于 HttpClient5 已经存在了一段时间,我假设 Spring 可以处理这个问题。
我们有哪些选择?
java - 如何使用 Apache httpclient5 从 SimpleHttpResponse 获取 HttpEntity
我正在尝试从httpclient4迁移到httpclient5。
我CloseableHttpAsyncClient
用来执行请求。
当使用httpclient4 httpClient.execute()
时,期望HttpRequestUri
作为第一个参数,并FutureCallable<httpResponse>
作为第二个参数。
但是在httpclient5中,当您调用httpClient.execute()
它时,它期望SimpleHttpRequest
作为第一个参数,并FutureCallable<SimpleHttpResponse>
作为第二个参数。
问题是我正在使用未来response.getEntity()
的completed
方法,我必须HttpEntity
出于正当理由使用。但是SimpleHttpResponse
没有getEntity()
办法。
有什么办法可以从中获取HttpEntity
吗SimpleHttpResponse
?
解决这个问题的另一种方法是使用ClassicHttpRespose
而不是SimpleHttpResponse
,因为它有getEntity()
方法。问题是该execute()
方法没有将其作为有效参数接收。
总而言之,有没有办法从SimpleHttpResponse
或使用实体?execute
ClassicHttpResponse
http - httpcomponents-core:来自任何传入主机/ip的句柄
我已经设置了一个HttpServer
响应端口 80 上的请求,但它似乎只适用于localhost
和127.0.0.1
我需要处理来自机器外部 IP、“.local”或任何其他方式来寻址设备的请求。
相反,我得到“421(误导请求)”和“不权威”。
我也尝试过:
我正在使用 httpcomponents-core 5.1 并基于例如: https ://github.com/apache/httpcomponents-core/blob/5.1.x/httpcore5/src/test/java/org/apache/hc/core5 /http/examples/ClassicFileServerExample.java
我已经通读了源代码,可以看到哪里出了问题,org.apache.hc.core5.http.protocol.RequestHandlerRegistry<T>
但是看不到如何避免这种陷阱的示例。