1. JDK提供了 网络编程的 基础类,Socket
Socket socket = new Socket();
socket.connect(new InetSocketAddress(8081));
2. JDK 提供的 发送 http 请求的 工具类: HttpURLConnection
URL url = new URL("http://localhost:8081/hello/world");
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
// 其实,以上设置还没有进行 网络连接
// 当调用 getResponseCode() 方法 时,才会发起网络请求
urlConnection.getResponseCode();
3.Apache 的 HttpClient
引入 依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.15</version>
</dependency>
浅析 InternalHttpClient
首先,是httpClient的实现类
不是 public、不是proviate、不是 protected,这种修饰应该是 只能在同一个包里才可以访问,所有 我们不能直接去实例化。应该是有一个 builder工厂类来构造,这个builder类是HttpClientBuilder
另外提供了一个 HttpClients类,集成了不同的构建方式。
InternalHttpClient 只有一个 有参构造函数:
恐怖,这入参怎么这么多。
以下是构造函数 `InternalHttpClient` 中各个入参的含义解释:
1. **`ClientExecChain execChain`**
定义客户端请求执行链,用于处理HTTP请求的执行逻辑,支持拦截器模式。
2. **`HttpClientConnectionManager connManager`**
管理HTTP连接的生命周期,负责创建、分配和释放连接。
3. **`HttpRoutePlanner routePlanner`**
规划HTTP请求的路由,决定请求通过哪个代理或目标主机直接发送。
4. **`Lookup<CookieSpecProvider> cookieSpecRegistry`**
提供Cookie规范的查找表,用于根据协议选择合适的Cookie策略。
5. **`Lookup<AuthSchemeProvider> authSchemeRegistry`**
提供认证方案的查找表,用于根据协议选择合适的认证机制(如Basic、Digest等)。
6. **`CookieStore cookieStore`**
存储和管理Cookie,用于在请求中自动添加或在响应中保存Cookie。
7. **`CredentialsProvider credentialsProvider`**
提供凭据管理功能,用于存储和检索认证信息(如用户名和密码)。
8. **`RequestConfig defaultConfig`**
设置默认的请求配置,包括超时时间、重试策略等。
9. **`List<Closeable> closeables`**
存储需要关闭的资源列表,确保在对象销毁时能够正确释放资源。
看下 builder 是怎么收集这些参数的。
1. 实例化 PublicSuffixMatcher 这个不知道干什么的
2. 实例化 HttpRequestExecutor
3. 构建 HttpClientConnectionManager 的实现类 PoolingHttpClientConnectionManager
先看下这里:
ConnectionSocketFactory 接口,用来创建 Socket
PlainConnectionSocketFactory 完成 http
SSLConnectionSocketFactory 完成 https
这里就是 返回 http 和 https 的 SocketFactory 的Map 集合,并套娃给 另一个类
连接池管理启 持有它
使用构造函数构建 PoolingHttpClientConnectionManager实例
构建这两个属性:
DefaultHttpClientConnectionOperator
CPool
Socket 和 连接相关的配置
最大连接数 路由配置
连接复用的策略
长连接策略
下面这些都是啥?
构建 ClientExecChain 实现类 MainClientExec
构建http 的请求 响应拦截器 HttpProcessor
创建一个 builder 对象
先加入 请求 和 响应 拦截启
添加 固定的 请求拦截器
cookie
下面进行各种装饰,添加新功能
执行请求
4. Square 的 OkHttpClient
引入依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>2.8.0</version>
</dependency>
5. 综合体
5.1 工厂类 接口 ClientHttpRequestFactory
5.2 工厂类 抽象层 AbstractClientHttpRequestFactoryWrapper
5.3 工厂类 实现层
BufferingClientHttpRequestFactory
InterceptingClientHttpRequestFactory