登录
首页 >  文章 >  java教程

JavaHttpClient发送请求教程详解

时间:2025-08-01 12:33:49 433浏览 收藏

本篇文章给大家分享《Java使用HttpClient发送HTTP请求教程》,覆盖了文章的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

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怎么发送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 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。

示例代码如下:

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 虽然不能覆盖所有需求,但对大多数简单的网络通信来说已经够用了,特别是项目不想引入第三方库的时候,用它挺合适。

到这里,我们也就讲完了《JavaHttpClient发送请求教程详解》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于java,异步请求,httpclient,GET请求,POST请求的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>