Java学习第八十四部分——HttpClient

目录

一、前言介绍

二、主要特点

三、功能用法

四、应用场景

五、最佳实践

六、总结归纳


一、前言介绍

HttpClient 是一个用于发送 HTTP 请求和接收 HTTP 响应的客户端库,广泛应用于 Web 开发、API 调用、微服务通信等场景。

二、主要特点

  • 支持多种HTTP方法:GET、POST、PUT、DELETE等

  • 异步操作:支持异步请求模式

  • 请求/响应处理:可自定义请求头和读取响应内容

  • 连接管理:支持连接池和持久连接

三、功能用法

1. 基本 HTTP 请求

HttpClient 支持所有 HTTP 方法,包括:

  • GET:获取资源

  • POST:提交数据

  • PUT:更新资源

  • DELETE:删除资源

  • PATCH:部分更新

示例(GET & POST 请求):

java 复制代码
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

// 创建 HttpClient
HttpClient client = HttpClient.newHttpClient();

// GET 请求
HttpRequest getRequest = HttpRequest.newBuilder()
    .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
    .build();
HttpResponse<String> getResponse = client.send(getRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(getResponse.body());

// POST 请求(提交 JSON 数据)
String postData = "{\"title\":\"foo\", \"body\":\"bar\", \"userId\":1}";
HttpRequest postRequest = HttpRequest.newBuilder()
    .uri(URI.create("https://jsonplaceholder.typicode.com/posts"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(postData))
    .build();
HttpResponse<String> postResponse = client.send(postRequest, HttpResponse.BodyHandlers.ofString());
System.out.println(postResponse.body());

2. 高级功能

  • 自定义请求头(如 `Authorization`、`User-Agent`)

  • 超时控制(避免请求长时间阻塞)

  • 代理设置(适用于企业内网环境)

  • 文件上传/下载(支持 `MultipartFormData`)

  • Cookie 管理(适用于需要会话保持的场景)

java 复制代码
// 设置请求头
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/data"))
    .header("Authorization", "Bearer token123")
    .header("User-Agent", "MyApp/1.0")
    .timeout(Duration.ofSeconds(10))
    .build();

四、应用场景

1.Web API 调用

  • 调用 RESTful API(如 GitHub API、Twitter API)

  • 与后端服务交互(如微服务架构中的服务间通信)

2.爬虫 & 数据抓取

  • 爬取网页内容(如新闻、电商数据)

  • 自动化测试(模拟 HTTP 请求)

3.文件上传/下载

  • 上传图片、视频到云存储(如 AWS S3、阿里云 OSS)

  • 下载远程文件(如 PDF、Excel 报表)

4.身份认证 & OAuth

  • 使用 `Bearer Token` 访问受保护的 API

  • 实现 OAuth 2.0 授权流程

五、最佳实践

1.使用单例模式(避免频繁创建)

  • HttpClient 内部管理 TCP 连接,频繁创建会导致性能问题。
java 复制代码
// Java 11+ 的 HttpClient 是线程安全的
HttpClient client = HttpClient.newHttpClient();

2.设置合理的超时时间

  • 避免因网络问题导致线程阻塞。
java 复制代码
// Java 示例
HttpRequest request = HttpRequest.newBuilder()
    .timeout(Duration.ofSeconds(30))
    .build();

3.异常处理

  • 网络异常(如 `HttpRequestException`)

  • HTTP 错误状态码(如 404、500)

java 复制代码
try {
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    if (response.statusCode() >= 400) {
        System.err.println("请求失败: " + response.statusCode());
    } else {
        System.out.println(response.body());
    }
} catch (IOException | InterruptedException ex) {
    System.err.println("请求异常: " + ex.getMessage());
}

4.使用 `using` 或 `try-with-resources` 释放资源

  • 避免内存泄漏(特别是在 Java 中)。
java 复制代码
try (HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString())) {
    System.out.println(response.body());
}

六、总结归纳

方面 关键点
功能 支持 GET/POST/PUT/DELETE、自定义 Header、超时控制、文件上传/下载
应用场景 API 调用、爬虫、微服务通信、文件传输
最佳实践 单例模式、超时设置、异常处理、资源释放
  • HttpClient 是现代化 HTTP 通信的核心工具,合理使用可以提升应用的稳定性和性能。
相关推荐
浮游本尊13 分钟前
Java学习第22天 - 云原生与容器化
java
渣哥2 小时前
原来 Java 里线程安全集合有这么多种
java
间彧2 小时前
Spring Boot集成Spring Security完整指南
java
间彧3 小时前
Spring Secutiy基本原理及工作流程
java
Java水解4 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆6 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学6 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole6 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊6 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端