问题标签 [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 - 在httpclient5中实现HttpRequestRetryHandler和RequestBuilder
我计划更新我的项目以使用 httpclient5。
之后我在 httpclient5(5.0、5.01 和 5.0.2)中认识到,它们不再具有 HttPRequestRetryHandler 和 RequestBuilder 类。
有什么办法或更新不在 http5 中使用这些类,还是我们有一些具有相同功能的替代品?
java - Apache HTTP 客户端 loadTrustMaterial 不起作用
首先,源代码中没有注释。
org.apache.hc.core5.ssl.SSLContextBuilder#loadTrustMaterial(org.apache.hc.core5.ssl.TrustStrategy)
这是会触发混淆行为的代码,它与 apache 官方演示Apache Demo相同
输出是:
即使我直接返回false
我的自定义 TrustStrategy。
那会中断连接,但是我不认为接口返回false,而是仅在异常正确使用时才中断。
问题:为什么 return false 不起作用?Thorw execption 让我感觉不对,这是设计的吗?
http - HttpClient v5 ConnectionBackoffStrategy 或 HttpRequestRetryStrategy 中的混淆配置
我需要一些机制来休眠,然后在收到429
响应时重试。
我想实施HttpRequestRetryStrategy
更合适。但是当我看到ConnectionBackoffStrategy
界面时我很困惑。
我应该使用哪一个?为什么?
我担心连接。如果 http 客户端实例休眠了30-60 分钟,我的连接发生了什么PoolingHttpClientConnectionManager
?他们还活着吗?还是他们被驱逐?
apache-httpclient-5.x - Apache HTTPClient5 - 如何防止连接/流被拒绝
问题陈述
语境
- 我是一名软件工程师,正在测试运行餐厅菜单项的订单排列,以确认它们通过 POS 成功下单
- 简而言之,这会将 JSON 有效负载发布到端点,然后使用 POS 验证订单以定义成功/失败/其他
- POS 以及因此每秒事务数 (TPS) 可能会有所不同,但每个后端使用相同的核心处理
- 这可以高达每项约 22,000 个排列,以易于管理的 JSON 大小,需要尽快处理
- 网络可能因餐厅和/或地区而异,其中一个正在测试
- 例如,有些延迟比其他延迟高得多
- 因此,HTTPClient 应该能够智能地协商相同的内容和端点,而不管这一点
直接问题
- 我正在使用 Apache 的 HTTP Client 5 w/ PoolingAsyncClientConnectionManager 来执行菜单内容的 GET 和 POST 来检查订单是否成功
- 这是开箱即用的,但有时会失去与/的连接
Stream Refused
,特别是:org.apache.hc.core5.http2.H2StreamResetException: Stream refused
- 我可以找到没有单独的调整似乎适用于具有可变延迟的所有网络环境
- 跟踪堆栈跟踪似乎表明流已经关闭,因此需要一种方法来保持它打开或不执行已经关闭的连接
解决问题的一些尝试
- 尝试使用搜索引擎寻找答案,但 HTTPClient5 的点击率很少
- 试图使用官方文档,但这很少
- 将每条路线的最大连接数更改为减少的数量,将不活动验证或连接时间更改为有效
- 不活动检查可能会修复 POST,但会停止某些事务的 GET
- 并且对一个区域/餐厅的调整可能适用于 1 然后中断另一个,只有网络作为变量
- 切换到具有不同超时的自定义 RequestConfig
用于分析的初始代码段
(除了上述带更改尝试的部分)
- 包装器处理初始化并获得响应
- 使用实际的处理程序和探测代码
直接问题
- 有没有办法配置客户端,以便它可以自行处理这些差异,而无需显式修改每个端点上下文的配置?
java - org.apache.hc.core5.http2.impl.nio.AbstractH2StreamMultiplexer.onInput 中的 java.nio.BufferOverflowException
使用此代码访问 HTTP/2 公开的 URL:
回调2:
}
它失败了,我有这个我不明白的堆栈跟踪:
如果我添加日志(只需添加 log4j2.xml),我会得到一个不同的异常:
所以:
- 为什么只添加日志记录会改变事情,我想这与速度有关
- 第一个异常是什么意思?
- 我该如何解决?
java - Apache HTTP/2 客户端 5.0 POST 请求缺少有效负载/内容
我有一个部署到 Tomcat 的小型示例 servlet,它将回显任何接收到的参数。Tomcat 配置为支持 HTTP/1.1 和 HTTP/2。我可以用来curl
向 servlet 发出 GET 请求,证明它可以在 HTTP/1.1 和 HTTP/2 上工作。
使用 Apache HTTP 5.0 客户端我有一个单元测试来命中 servlet 和POST
一个带有一些参数(请求内容)的请求,它工作正常 - 服务器接收参数并将它们返回给我可以读取它们的客户端。在这个测试中,我调用客户端使用 HTTP/1.1 或 HTTP/2CloseableHttpAsyncClient.setVersionPolicy()
调用。但是,如果我更改为使用 HTTP/2,则客户端不会将请求内容发送到服务器。
下面是成功的 HTTP/1.1 调用的示例代码 - 你可以看到我有setVersionPolicy(HttpVersionPolicy.FORCE_HTTP_1)
. 如果我将其更改为,FORCE_HTTP_2
则通过 HTTP/2.0 进行调用,但不发送请求内容。
谁能建议我做错了什么或我需要做些什么?我没有找到很多关于使用新的 Apache 5.0 客户端库的文档,并且这些示例没有显示发送和 POST 内容(或者至少是我能找到的那些)。
java - 如何解决 Apache 客户端 5.0“连接已关闭”HTTPS POST 错误
我在端口 8002 上为 HTTP1.1 和 HTTP/2 配置了 Tomcat 服务器,在端口 8003 上还配置了 HTTPS 以允许我进行测试。我正在使用 Apache HTTP Client 5.0 编写 Java 代码以将 HTTP/2 与服务器通信并遇到问题。最终,我希望能够使用 HTTP/2 将带有内容的消息发布到服务器,但是我遇到了问题,所以我将我的代码精简为一个基于 Apache 提供的示例之一的简单示例 - H2TlsAlpnRequestExecutionExample。
给定的示例是使用 GET 请求访问https://nghttp2.org,我可以让它工作。更改为 POST 请求也有效 - 尽管您收到 HTTP 405(不允许的方法)响应,但调用已完成。如果我将完全相同的示例指向我的服务器,那么我可以使用 HTTP/2 成功地 GET 和 POST 到常规 HTTP/1.1 端口 (8002)。然而,在端口 8003 上尝试 GET 或 POST 到 HTTPS 失败 - 尽管使用 HTTPv1.1(而不是 HTTP/2)的 GET/POST 也适用于 HTTPS/8003。
使用 DEBUG 时,我从 apache 库中看不到太多调试信息,但我确实看到我的日志消息说我的证书在这两种情况下都是受信任的,因此显然已经完成了一些初始调用协商。
这是对 nghttp2.org 的 HTTP2 调用的日志(我从日志中的一行看到使用 HTTP/2):
这是我指向我的服务器时的日志。您可以看到它说它信任证书,因此它必须已连接并进行了一些协商,但之后没有任何反应。
这是代码。
有没有人知道如何调试或解决问题?我认为我的 Tomcat 服务器设置没问题 - 有什么东西或工具可以用来验证吗?我可以查看更多调试/日志信息以了解连接关闭的原因以及关闭连接的原因吗?
java - 需要 Apache HTTP 客户端 5.0 HTTP/2 POST 示例
我可以使用 CURL 将带有有效负载的 HTTP/2 POST 请求发送到https://httpbin.org/post
,如下例所示:
您可以看到它发送 arg1/arg2 参数,它们在回显的响应中。
我想在 Java 中复制该代码。我自己没有运气,也找不到带有有效负载的 HTTP/2 POST 示例。有一些使用没有有效负载的 HTTP/2 的 GET/POST 调用示例,实际上我可以编写代码来发出没有有效负载的请求,但我无法发送有效负载。如果我使用相同的代码但使用 HTTP/1,则会发送有效负载。使用BasicRequestProducer
类你可以给它生产者(发送我希望的请求数据)和消费者(消费响应),但生产者似乎永远不会发送数据。
有关我正在使用的代码类型,请参阅关于HTTP/2 Connection Closed的其他问题。
我在我的示例中添加了一些 DEBUG,我可以看到内容/正文被添加到请求中(或者至少在我看来它看起来像是被添加了)那么消息的正确格式是否存在问题?
任何人都可以提供 Java 代码来演示带有有效负载的成功 HTTP/2 POST 吗????
http - 如何在 Apache Http5 Java 库中重试?
我们正在从 Apache 的 Http4.X 升级到 Java 中的 Http5。DefaultHttpRequestRetryHandler
现在已从 Apache 的 HTTP 库中删除。什么是替代品?如何在 Http5 中实现重试?
java - OkHTTP 或 Apache HTTP Client 5 是否支持运行 AIX?
刚刚注意到 netty-tcnative-boringssl 不支持 AIX(在 AIX 上尝试并由 netty-tcnative 的开发人员确认)。这让我很兴奋,并渴望尽快找到带有本机 openssl lib 的 HTTP2 替代解决方案。
由于我需要在没有 HTTP2 的 Java8 上运行它,所以它们必须具有对它的原生支持。有谁知道 Apache HTTP Client 5 或 OkHTTP 具有内置的原生 openssl(boringSSL) 或插件库,可以使它们在不使用 JDK 的 SSL 提供程序的情况下运行?