一、开始使用httpclient
本文档需要使用的依赖有如下几个:
org.apache.httpcomponents
httpclient
4.5.10
org.apache.httpcomponents
httpmime
4.5.10
org.apache.httpcomponents
httpcore
4.4.11
1、创建HttpClient对象。
创建httpclient对象的方式有两种,
第一种是使用默认配置创建:
CloseableHttpClient client = HttpClients.createDefault();
第二种是使用HttpClients.custom()定制:
HttpClients.custom().setDefaultRequestConfig(RequestConfig)
这其中RequestConfig的设计方式可以学习一下。RequestConfig只有一个默认访问修饰符的构造函,这就意味着我们在使用这个类的时候不能之间构建示例;RequestConfig有很多私有属性,这些属性没有get/set方法,所以,即便是我们拿到了RequestConfig类的实例,也不能去修改其中的属性值。那么RequestConfig是如何构造实例并且为属性赋值的呢?RequestConfig在实例化的时候会利用其公共内部类Builder。使用方式为RequestConfig.custom().setXXX().builder()。调用custom方法返回一个Builder类实例,改类里有设置RequestConfig同名属性的各种方法,设置完毕后调用builder方法构造一个新的RequestConfig实例。从这个过程中可以看出来,RequestConfig对象的属性是不可变的。
有几个参数我们自己必须设置一下:
(1)connectionRequestTimeout:从连接池中获取连接的超时时间,超过该时间未拿到可用连接,会抛出:
ConnectionPoolTimeoutException: Timeout waiting for connection from pool
(2)connectTimeout:连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
(3)socketTimeout:服务器返回数据(response)的时间,超过该时间抛出read timeout
以上3个超时相关的参数如果未配置,默认为-1,意味着无限大,就是一直阻塞等待。
2、创建请求方法的实例
创建请求方法的实例并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象:
Htt