java 11 开始自带 httpclient,可用于发送 http 请求。1. 发送 get 请求:通过 httprequest.newbuilder() 构建请求,使用 client.send() 同步获取响应;2. 发送 post 请求:设置 .post() 方法并携带 body 数据,需指定 content-type 请求头;3. 配置请求头和超时:使用 .headers() 添加多个头信息,.timeout() 设置超时时间,.version() 指定 http 版本;4. 异步请求处理:使用 client.sendasync() 实现非阻塞调用,默认使用 forkjoinpool.commonpool() 执行任务。整体上,httpclient 简洁易用,适合不依赖第三方库的常见网络通信场景。

Java 发送 HTTP 请求其实不难,尤其是从 Java 11 开始自带了 HttpClient 类,用起来比以前方便多了。如果你之前用过 Apache HttpClient 或者 OkHttp,这个原生的 HttpClient 虽然功能没那么全,但日常用已经够用了,而且不用额外引入依赖。

下面我从几个常见使用场景出发,讲讲怎么在 Java 中用 HttpClient 发起 HTTP 请求。
GET 请求是最常见的请求方式,通常用于获取数据。Java 的 HttpClient 提供了同步和异步两种方式,默认我们用同步方式处理就够了。
立即学习“Java免费学习笔记(深入)”;

举个例子:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}几点注意:

BodyHandlers.ofString() 是告诉程序响应体以字符串形式返回,也可以换成 ofFile 存到文件里。POST 一般用来提交数据,比如表单或者 JSON 数据。这时候就需要设置请求方法为 POST,并带上 body。
示例代码如下:
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://jsonplaceholder.typicode.com/posts"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}"))
.build();关键点:
Content-Type 头很重要,服务器靠这个判断你传的是什么格式的数据。BodyPublishers.ofString() 可以发送 JSON 字符串,也可以用 ofInputStream 或其他方式发送不同类型的 body。除了基本的 GET 和 POST,实际开发中我们经常需要设置一些高级选项,比如添加 headers、设置超时时间等。
常用操作包括:
.headers("key1", "value1", "key2", "value2")
.timeout(Duration.ofSeconds(10))
.version(HttpClient.Version.HTTP2)
这些都可以在构建 HttpRequest 的时候通过链式调用加上去。
例如加多个 header:
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.headers("Authorization", "Bearer token123", "Accept", "application/json")
.timeout(Duration.ofSeconds(5))
.GET()
.build();前面的例子都是同步请求,即调用 client.send() 后会阻塞当前线程直到结果返回。如果想非阻塞执行,可以用 sendAsync() 方法。
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.ifPresent(System.out::println);这种方式适合并发请求或不想阻塞主线程的场景。但要注意,异步请求默认使用 ForkJoinPool.commonPool() 来执行任务,如果有大量并发,最好自己管理线程池。
基本上就这些。Java 自带的 HttpClient 虽然不能覆盖所有需求,但对大多数简单的网络通信来说已经够用了,特别是项目不想引入第三方库的时候,用它挺合适。
以上就是Java怎么发送HTTP请求 Java使用HttpClient进行网络通信指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号