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 请求怎么发?
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 response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); }}
几点注意:
URI 必须是合法的,否则会抛异常。BodyHandlers.ofString() 是告诉程序响应体以字符串形式返回,也可以换成 ofFile 存到文件里。默认是 GET 请求,不需要特别指定方法。
POST 请求怎么写?
POST 一般用来提交数据,比如表单或者 JSON 数据。这时候就需要设置请求方法为 POST,并带上 body。
示例代码如下:
通义万相
通义万相,一个不断进化的AI艺术创作大模型
596 查看详情
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。如果你要传对象,可以用像 Gson 或 Jackson 把对象转成 JSON 字符串再传。
怎么处理请求头、超时等配置?
除了基本的 GET 和 POST,实际开发中我们经常需要设置一些高级选项,比如添加 headers、设置超时时间等。
常用操作包括:
添加多个请求头:.headers("key1", "value1", "key2", "value2")设置超时时间:.timeout(Duration.ofSeconds(10))设置请求版本(HTTP/1.1 或 HTTP/2):.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进行网络通信指南的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/343264.html
微信扫一扫
支付宝扫一扫