Java 如何发起 HTTP请求

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值