首页 > Java > java教程 > 正文

Java怎么发送HTTP请求 Java使用HttpClient进行网络通信指南

蓮花仙者
发布: 2025-07-16 16:59:02
原创
974人浏览过

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使用HttpClient进行网络通信指南

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

Java怎么发送HTTP请求 Java使用HttpClient进行网络通信指南

下面我从几个常见使用场景出发,讲讲怎么在 Java 中用 HttpClient 发起 HTTP 请求。


GET 请求怎么发?

GET 请求是最常见的请求方式,通常用于获取数据。Java 的 HttpClient 提供了同步和异步两种方式,默认我们用同步方式处理就够了。

立即学习Java免费学习笔记(深入)”;

Java怎么发送HTTP请求 Java使用HttpClient进行网络通信指南

举个例子:

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());
    }
}
登录后复制

几点注意:

Java怎么发送HTTP请求 Java使用HttpClient进行网络通信指南
  • 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进行网络通信指南的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号