设为首页 加入收藏

TOP

Httpclient4.4之原理(Http执行上下文)
2015-07-16 12:56:17 】 浏览:10078
Tags:Httpclient4.4 原理 Http 执行 上下文

最初HTTP被设计为无状态的。然而,真实的应用中常常要能够通过几个逻辑相关的请求/响应保持状态信息。为了使应用程序能够保持一个处理状态,HttpClient允许HTTP请求在特定的执行上下文内执行,称为HTTP上下文。如果相同的上下文在连续的请求之间重用,多个逻辑相关的连续请求可以参与一个逻辑会话。HTTP上下文的功能类似于java.util.Map,它只不过是任意命名的值的集合。应用程序能在请求执行之前填充上下文属性,也能在请求执行完成之后检查上下文。


HttpContext能包含任意对象,因此,可能不是线程安全的。建议每个执行线程维护自己的上下文。


在HTTP请求执行的过程中,HttpClient添加以下属性到执行上下文:


我们可以使用HttpClientContext适配器类来简化与上下文状态之间的相互作用:


HttpContext context = <...>
HttpClientContext clientContext = HttpClientContext.adapt(context);
HttpHost target = clientContext.getTargetHost();
HttpRequest request = clientContext.getRequest();
HttpResponse response = clientContext.getResponse();
RequestConfig config = clientContext.getRequestConfig();


代表一个逻辑相关会话的多请求序列应执行在同一个HttpContext实体中,确保会话上下文与状态信息在请求间自动传播(示例衔接上面的示例):


CloseableHttpClient httpclient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().
setSocketTimeout(1000).setConnectTimeout(1000).build();
HttpGet httpget1 = new HttpGet("http://localhost/1");
httpget1.setConfig(requestConfig);
//context上个示例中定义了
CloseableHttpResponse response1 = httpclient.execute(httpget1, context);
try {
HttpEntity entity1 = response1.getEntity();
} finally {
response1.close();
}
HttpGet httpget2 = new HttpGet("http://localhost/2");
CloseableHttpResponse response2 = httpclient.execute(httpget2, context);
try {
HttpEntity entity2 = response2.getEntity();
} finally {
response2.close();
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java8之lambda表达式(构造器引用.. 下一篇Httpclient4.4之原理(HttpClient..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目