HttpClient帮助文档总结

文章内容

1.HttpClient的主要对象
2.HttpClient特性和机制


1.HttpClient的主要对象

1.1.URI(资源定位)
URI用来定位请求的资源的位置,URI的组成为:

[scheme:][//host:port][path][?query][#fragment]

在HttpClient中通过构造者模式创建URI;

1.2.HTTP request(Http请求)
HttpClient支持Http/1.1标准,支持所有方法:GET , HEAD , POST , PUT , DELETE , TRACE, OPTIONS,对应的实现类为HttpGet、HttpHead…

1.3.HTTP response(Http请求)
HttpClient请求返回的对象,包含响应的所有内容:Http响应的头部信息和数据实体;

1.4.Request execution(请求执行)
HTTP request请求对象通过执行execute方法返回HTTP response对象;

CloseableHttpResponse response = httpclient.execute(httpget);

1.5.HTTP entity(HTTP 实体)
HTTP entity一般由实体头域和实体组成,实体头域包含Content-Encoding、Content-Length等实体头;HTTP request和HTTP response都可以附加entity,内容可以是字符串、文件或者是动态的内容;可通过关闭HTTP response或者entity自身来释放底层资源;

entity分为三种:streamed(一次读写), self-contained(从内存中读取,可重复)、wrapping(从其他entity封装);

1.6.TTP execution context(HTTP上下文)
原生的HTTP被设计成无状态的,但是对于一些需要维护请求状态的连接(如TLS),则无法胜任;

1.7.Response handlers(响应处理)
在获取到响应数据后调用,用于对返回的数据进行处理;

MyJsonObject myjson = client.execute(httpget, rh);

1.8.HTTP protocol interceptors(HTTP协议拦截器)
在数据被发送到服务器之前调用,用于对请求数据进行处理,特别是对于持续的HTTP请求很有效;

CloseableHttpClient httpclient = HttpClients.custom()
    .addInterceptorLast(new HttpRequestInterceptor() {
    public void process(
    final HttpRequest request,
    final HttpContext context) throws HttpException, IOException {
    AtomicInteger count = (AtomicInteger) context.getAttribute("count");
    request.addHeader("Count", Integer.toString(count.getAndIncrement()));
    }
})
.build();

1.9.Exception(异常)
HttpClient主要有两类异常:IOException和HttpException

IOException:主要是数据传输层面的错误
HttpException:协议层面的错误

HttpException是IOException的子类,HttpClient会尝试恢复I/O上的异常,却不会恢复HttpException;

1.10. Request retry handler(请求重发处理)
如果出现异常,可通过 Request retry handler对可能的异常原因进行恢复;可以使用StandardHttpRequestRetryHandler来代替默认的handler,这些方法包括:GET , HEAD , PUT , DELETE , OPTIONS 和 TRACE

1.11.Redirect handling(处理重定向)
HttpClient可以自动处理各种重定向,除了HTTP协议标准中禁止的重定向方式,比如状态码303,按标准必须转换成GET方式,但是可以通过自定义重定向策略来适应不同情况;

LaxRedirectStrategy redirectStrategy = new LaxRedirectStrategy();
CloseableHttpClient httpclient = HttpClients.custom()
                        .setRedirectStrategy(redirectStrategy)
                        .build();

1.12.HTTP cookies(HTTP缓存)
cookies用于保存服务器和客户端之间会话相关的token和短信息;HttpClient实现了cookies相关的操作;cookies的不同标准和策略;


2.HttpClient特性和机制

2.1.HttpClient是线程安全的
HttpClient可以可重复用于HTTP请求,而不需要为每一个HTTP请求创建一个HttpClient;

2.2.HttpClient资源必须释放
当HttpClient不再使用,需要调用其close方法释放内存资源;

2.3.HttpClient连接管理器
连接管理类似于线程池的作用,用于减少连接的建立,节省系统资源;管理器关闭,其中的alive连接都将被关闭;

* 2.3.1.Simple connection manager(简单连接管理器)*
同一时间值维持一个连接,只能被一个线程使用(即使是线程安全的)

* 2.3.2.Simple connection manager(池连接管理)*
同一时间值维持数个连接,同时为多个线程提供服务;对于已经维持的连接可提供给其他线程使用,不需要重新创建新的连接;在每个线路对应的连接数和总共的连接数都有限制,默认分别是2个和20个;不过可以进行配置;


2.4.与连接管理器相关的机制和策略

2.4.1.Connection eviction policy(连接回收策略)

2.4.2.Connection keep alive strategy(连接保活策略)

2.4.3.Connection socket factories(Socket连接工厂)


2.5.其他内容

2.5.1.HttpCient实现了与Http协议相关的网络安全认证协议

2.5.2.Callbacks(异步请求)
当请求完成好时,调用MyCallback对应的方法,实现Http异步请求;

private final class MyCallback implements FutureCallback<Boolean> {
public void failed(final Exception ex) {
// do something
}
public void completed(final Boolean result) {
// do something
}
public void cancelled() {
// do something
}
}
HttpRequestFutureTask<Boolean> task = futureRequestExecutionService.execute(
new HttpGet("http://www.google.com"), HttpClientContext.create(),
new OkidokiHandler(), new MyCallback());

HttpCLient在线文档

HttpClient文档PDF下载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值