Java进阶篇--HttpClient工具类

目录

什么是HttpClient

HttpClient的注意事项

HttpClient的使用流程

HttpClient常用方法

HttpClient工具类

添加依赖


什么是HttpClient

HttpClient 是 Apache HttpComponents 的一个子项目,旨在提供高效的、最新的、功能丰富的 HTTP 协议客户端编程工具包。它是一个 Java 库,可用于在 Java 应用程序中发送 HTTP 请求并处理 HTTP 响应。

HttpClient 提供了一组 API,使开发人员能够轻松地构建和管理 HTTP 请求,同时它还提供了各种功能,例如连接管理、重定向处理、代理服务器支持、请求/响应拦截器等。

HttpClient 支持 HTTP/1.1 和 HTTP/2 协议,实现了所有 HTTP 的方法(GET,POST,PUT,DELETE 等),支持自动转向,支持代理服务器,支持 HTTPS 协议进行安全传输。

它具有以下主要特点:

  1. 高效的连接管理:HttpClient 支持连接池、连接重用、连接保持等功能,可以有效地减少网络连接的开销。
  2. 灵活的请求和响应处理:开发人员可以轻松地构建 HTTP 请求,并且可以方便地对响应进行处理。
  3. 对 WebSocket 的支持:HttpClient 支持 WebSocket 协议,可以方便地进行 WebSocket 通信。
  4. 灵活的拦截器:开发人员可以方便地通过拦截器对请求和响应进行预处理和后处理。
  5. 支持 HTTPS 协议:HttpClient 支持 HTTPS 协议,可以保证数据的安全传输。

总之,HttpClient 是一个功能强大、易于使用、灵活的 HTTP 客户端编程工具包,适用于各种 Java 应用程序。

注意

HttpClient 3.x 版本与 HttpClient 4.x 版本之间确实存在较大的变化。在 HttpClient 4.x 版本中,API 被设计为更加模块化和扩展性,以便支持更多的 HTTP 方法和协议。此外,HttpClient 4.x 版本还提供了更强大的连接管理、重定向处理、代理服务器支持、请求/响应拦截器等功能。

如果从 HttpClient 3.x 版本升级到 HttpClient 4.x 版本,需要重新编写部分代码,并适应新的 API。建议参考 HttpClient 的官方文档或相关的迁移指南,以了解如何在 HttpClient 4.x 版本中实现相同的功能。

HttpClient的注意事项

HttpClient 是一个 HTTP 客户端库,主要用于发送和接收 HTTP 消息,但它并不具备以下一些特定的功能:

  1. 处理 HTTP 消息的内容:HttpClient 仅负责传输 HTTP 消息,但不会对消息的内容进行任何处理或解析。它不会执行像 JavaScript 这样的动态代码,也不会关注消息内容的类型或格式。
  2. 解析 HTML 或其他标记语言:HttpClient 并不具备解析 HTML 或其他标记语言的能力。它只关注 HTTP 消息的传输和基本处理,而不涉及对这些标记语言的解析和操作。
  3. 处理 content type:HttpClient 本身并不处理或解析 HTTP 消息的内容类型(content type)。它只是将接收到的 HTTP 消息原样传递给调用者,而不关心消息的具体内容类型或格式。
  4. 执行重定向:默认情况下,HttpClient 不会自动执行 HTTP 重定向。它只会发送原始的 HTTP 请求,并等待服务器返回响应。如果服务器返回了重定向响应,HttpClient 需要由开发人员手动处理重定向。
  5. 处理其他与 HTTP 消息传输相关的功能:HttpClient 主要关注的是发送和接收 HTTP 消息,对于一些与 HTTP 消息传输相关的功能,如身份验证、缓存、代理等,HttpClient 可能需要配合其他库或配置来实现。

总之,HttpClient 是一个强大的 HTTP 客户端库,主要用于发送和接收 HTTP 消息。然而,它并不具备处理 HTTP 消息内容、解析标记语言、自动执行重定向或其他一些与 HTTP 消息传输相关的特定功能。

HttpClient的使用流程

使用 HttpClient 工具类发送 HTTP 请求的流程通常如下:

  1. 创建 HttpClient 对象。
  2. 创建请求方法的实例,并指定请求 URL。如果需要发送 GET 请求,创建 HttpGet 对象;如果需要发送 POST 请求,创建 HttpPost 对象。
  3. 如果需要发送请求参数,可调用 HttpGet、HttpPost 共同的 setParams(HttpParams params) 方法来添加请求参数;对于 HttpPost 对象而言,也可调用 setEntity(HttpEntity entity) 方法来设置请求参数。
  4. 调用 HttpClient 对象的 execute(HttpUriRequest request) 发送请求,该方法返回一个 HttpResponse。
  5. 调用 HttpResponse 的 getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用 HttpResponse 的 getEntity() 方法可获取 HttpEntity 对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
  6. 释放连接。注意:无论执行方法是否成功,都必须释放连接。

HttpClient常用方法

HttpClient 4.x 是一个用于发送 HTTP 请求的 Java 库,它提供了一组方法来执行各种 HTTP 操作。以下是一些 HttpClient 4.x 的常用方法:

  1. execute(HttpUriRequest request): 发送请求并返回一个 HttpResponse 对象。
  2. execute(HttpUriRequest request, HttpContext context): 与上一个方法类似,但增加了额外的上下文信息。
  3. execute(HttpHost target, HttpRequest request): 在给定的目标主机上发送请求并返回 HttpResponse。
  4. execute(HttpHost target, HttpRequest request, HttpContext context): 与上一个方法类似,但增加了额外的上下文信息。
  5. send(HttpEntityEnclosingRequest request, HttpResponse responseHandler): 发送请求并使用指定的响应处理器处理响应。
  6. send(HttpEntityEnclosingRequest request, Class responseType): 发送请求并返回指定类型的响应对象。
  7. send(HttpEntityEnclosingRequest request, Type responseType): 与上一个方法类似,但指定了响应类型。
  8. getParams(): 获取 HttpClient 的参数。
  9. setParams(HttpParams params): 设置 HttpClient 的参数。
  10. getRequest(): 获取 HttpClient 的请求方法实例。
  11. setRequest(HttpRequest request): 设置 HttpClient 的请求方法实例。
  12. addHeader(String name, String value): 向请求头添加一个字段。
  13. removeHeader(String name): 从请求头中删除指定的字段。
  14. getParams(): 获取 HttpClient 的参数。
  15. setParams(HttpParams params): 设置 HttpClient 的参数。
  16. getRequest(): 获取 HttpClient 的请求方法实例。
  17. setRequest(HttpRequest request): 设置 HttpClient 的请求方法实例。
  18. addHeader(String name, String value): 向请求头添加一个字段。
  19. removeHeader(String name): 从请求头中删除指定的字段。
  20. getAllHeaders(): 获取所有请求头的字段。
  21. getHeaders(String name): 获取指定名称的请求头的字段。
  22. setEntity(HttpEntity entity): 设置请求参数实体。
  23. getEntity(): 获取响应内容的 HttpEntity 对象。
  24. releaseConnection(): 释放连接资源。

HttpClient工具类

添加依赖

<properties>
        <httpclient.version>4.5.5</httpclient.version>

        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <!-- springboot的web和test启动库 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <!-- apache httpclient组件 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- 跳过单元测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

下面是一个使用 HttpClient 发送 GET 请求的示例代码: 

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        // 创建 HttpClient 对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 创建 HttpGet 对象,并指定请求 URL
        HttpGet httpGet = new HttpGet("http://www.example.com");

        // 发送 GET 请求,并获取 HttpResponse
        HttpResponse httpResponse = httpClient.execute(httpGet);

        // 获取响应状态码和响应实体
        int statusCode = httpResponse.getStatusLine().getStatusCode();
        HttpEntity httpEntity = httpResponse.getEntity();

        // 处理响应内容
        if (httpEntity != null) {
            String responseString = EntityUtils.toString(httpEntity);
            System.out.println("Response Code: " + statusCode);
            System.out.println("Response Content: " + responseString);
        }

        // 释放连接资源
        httpClient.close();
    }
}

注意

httpClient.close() 是用于关闭 HttpClient 连接的函数。HttpClient 是用于发送 HTTP 请求的 Java 库,当不再需要使用 HttpClient 时,应该调用 close() 函数来释放资源,以避免资源泄漏。

具体来说,httpClient.close() 函数会关闭与服务器之间的连接,并释放相关的资源,如网络连接、线程池等。这有助于提高应用程序的性能和资源利用率,同时避免不必要的资源占用。

在使用 HttpClient 发送完 HTTP 请求后,建议及时调用 close() 函数关闭连接,以保持良好的应用程序性能和资源管理。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员老李头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值