gpt4 book ai didi

java - 如何在 httpclient 4.3+ 中更新 HttpClient 的设置?

转载 作者:行者123 更新时间:2023-11-29 05:13:09 24 4
gpt4 key购买 nike

在 httpclient 4.3 中,如果您尊重所有弃用,则必须使用 HttpClientBuilder(文档 here)构建和配置您的 HttpClient。这些方法是明确的,它们似乎易于使用,并且 HttpClient's interface清楚了。但也许有点太多了。

在我自己的例子中,我必须继承 Spring 的 HttpComponentsHttpInvokerRequestExecutor(文档 here)。因此,我可以轻松获得 HttpClient,但我对这个对象的了解只是它实现了接口(interface)。

由于客户端已经构建,而我对其实现一无所知,因此我无法访问 AbstractHttpClient 等方法的 setHttpRequestRetryHandleraddRequestInterceptor (虽然是的,我知道,它们已被弃用)。

那么,更新此 HttpClient 设置的最干净的方法是什么(重试处理程序和请求拦截器是我目前最关心的)?我应该...

  • ... 野蛮地将我的客户端转换为 AbstractHttpClient,希望我将始终收到此实现?
  • ... 在我的 HttpInvokerRequestExecutor 的构造函数中创建一个新的 HttpClient,并获得类似于下面复制的示例的内容?我可能会补充说,Spring 的构造函数(至少在 3.2.4 中)也使用了 httpclient 4.3 中弃用的方法。使用此策略我会错过任何副作用吗?
  • ...做一些我还没有提议的事情?

自定义构造函数示例:

public CustomHttpInvokerRequestExecutor() {
super(); // will create an HttpClient
// Now overwrite the client the super constructor created
setHttpClient(HttpClientBuilder.custom(). ... .build());
}

最佳答案

do something I have not proposed yet?

我的建议是重新考虑整个方法。不应该在运行时删除/添加协议(protocol)拦截器,而应该使用 HttpContext 实例来更新请求执行上下文并将配置传递给协议(protocol)拦截器

http://hc.apache.org/httpcomponents-core-4.4.x/tutorial/html/fundamentals.html#d5e306 http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/fundamentals.html#d5e223

CloseableHttpClient client = HttpClientBuilder.create()
.addInterceptorFirst(new HttpRequestInterceptor() {
@Override
public void process(
final HttpRequest request,
final HttpContext context) throws HttpException, IOException {
boolean b = (Boolean) context.getAttribute("my-config");
if (b) {
// do something useful
}

}
})
.build();
HttpClientContext context = HttpClientContext.create();
context.setAttribute("my-config", Boolean.TRUE);
CloseableHttpResponse response1 = client.execute(new HttpGet("/"), context);
response1.close();
context.setAttribute("my-config", Boolean.FALSE);
CloseableHttpResponse response2 = client.execute(new HttpGet("/"), context);
response2.close();

关于java - 如何在 httpclient 4.3+ 中更新 HttpClient 的设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27564351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com