http client 使用记录
老李 Lv4

HttpClient

使用版本: 4.5.5

对象创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
RequestConfig requestConfig = RequestConfig.custom()
// 从连接池中获取连接的超时时间
.setConnectTimeout(connectTimeout)
// 与服务器连接超时时间: httpclient 会创建一个异步线程用以创建 socket 连接,
// 此处设置该 socket 的连接超时时间
.setConnectionRequestTimeout(connectionRequestTimeout)
// socket 读数据超时时间: 从服务器获取响应数据的超时时间
.setSocketTimeout(socketTimeout)
.build();
CloseableHttpClient httpClient = HttpClients
.custom()
.setDefaultRequestConfig(requestConfig)
// 连接池中最大连接数
.setMaxConnTotal(weixinMediaDownloaderNumber)
// 分配给同一个 route (路由)最大的并发连接数
.setMaxConnPerRoute(weixinMediaDownloaderNumber)
.build();

超时设置

获取可用连接超时

HttpClient 中的要用连接时尝试从连接池中获取,若是在等待了一定的时间后还没有获取到可用连接(比如连接池中没有空闲连接了)则会抛出获取连接超时异常。

建立连接超时

指的是建立与目标 url 连接的超时时间,即客服端发送请求到与目标 url 建立起连接的最大时间。如果在该时间内还没有建立起连接,则就抛出 ConnectTimeoutException

等待响应超时

连接上一个 url 后,获取响应的等待时间 ,即在与目标 url 建立连接后,等待响应返回的最大时间,在规定时间内没有返回响应的话就抛出 SocketTimeoutException

连接池设置

setMaxConnTotal 设置连接池最大连接数,默认值为 20 。

setMaxConnPerRoute 设置每个路由最大连接数,即对于同一个路由最多只有 MaxConnPerRoute 个连接同时执行(www.google.com 即为一个路由)。默认值为 2 。