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


本文介绍了Java中进行网络编程的基础类Socket以及发送HTTP请求的工具类HttpURLConnection。同时,提到了Apache HttpClient和Square的OkHttpClient这两个流行的HTTP客户端库。此外,还讨论了Spring的ClientHttpRequestFactory接口及其实现,如BufferingClientHttpRequestFactory和InterceptingClientHttpRequestFactory,这些为开发者提供了更加灵活的网络请求处理方式。
214

被折叠的 条评论
为什么被折叠?



