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 通信的核心工具,合理使用可以提升应用的稳定性和性能。
相关推荐
工程师00710 分钟前
C#反射的概念与实战
开发语言·c#·反射
程序员编程指南12 分钟前
Qt 与物联网(IoT)开发
c语言·开发语言·c++·qt·物联网
AI大模型14 分钟前
Java程序员转型大模型应用开发:掌握这12步就够了!
java·程序员·llm
秋风起,再归来~15 分钟前
C++从入门到起飞之——智能指针!
开发语言·c++·算法
青云交17 分钟前
Java 大视界 -- Java 大数据在智能医疗远程健康监测与疾病预防预警中的应用(374)
java·大数据·智能医疗·java 大数据·慢性病管理·远程健康监测·疾病预警模型
MingYue_SSS20 分钟前
【未解决】STM32无刷电机驱动电路问题记录
笔记·嵌入式硬件·学习
野原鑫之祝24 分钟前
嵌入式开发学习———Linux环境下IO进程线程学习(一)
linux·c语言·学习·vim·嵌入式
大葱白菜32 分钟前
Maven 入门:Java 开发工程师的项目构建利器
java·后端·程序员
大葱白菜32 分钟前
Maven 与单元测试:JavaWeb 项目质量保障的基石
java·后端·程序员
天道佩恩35 分钟前
WebFlux响应式编程基础工程搭建
java·后端·响应式编程