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 通信的核心工具,合理使用可以提升应用的稳定性和性能。
相关推荐
benbenAItalk2 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl2 小时前
Java学习二 基本语法2, 算术运算符
java·学习
2601_966949652 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin2 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885722 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户2 小时前
Java锁
java·开发语言
多加点辣也没关系3 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2333 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21033 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
零依赖极客3 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm