- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 httpclient 4.3 中,如果您尊重所有弃用,则必须使用 HttpClientBuilder
(文档 here)构建和配置您的 HttpClient
。这些方法是明确的,它们似乎易于使用,并且 HttpClient
's interface清楚了。但也许有点太多了。
在我自己的例子中,我必须继承 Spring 的 HttpComponentsHttpInvokerRequestExecutor
(文档 here)。因此,我可以轻松获得 HttpClient
,但我对这个对象的了解只是它实现了接口(interface)。
由于客户端已经构建,而我对其实现一无所知,因此我无法访问 AbstractHttpClient
等方法的 setHttpRequestRetryHandler
或 addRequestInterceptor
(虽然是的,我知道,它们已被弃用)。
那么,更新此 HttpClient
设置的最干净的方法是什么(重试处理程序和请求拦截器是我目前最关心的)?我应该...
AbstractHttpClient
,希望我将始终收到此实现?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/
我是一名优秀的程序员,十分优秀!