Java HTTP客户端:顶级库概览(Java 11、Apache、OkHttp、Retrofit)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java HTTP客户端:顶级库概览

在现代Java开发中,几乎没有应用程序能脱离HTTP协议进行交互。向REST API发送请求、文件上传、与微服务协作——所有这些都需要一个可靠且便捷的HTTP客户端。本文将介绍四种最流行的Java HTTP库:标准库HttpClient(Java 11+)、Apache HttpClient、OkHttp和Retrofit。您将了解它们的特点、优势,并获取实用的代码示例。



1. Java 11 HttpClient (java.net.http)

从Java 11开始,标准库中新增了一个现代化的HTTP客户端,旨在取代过时的HttpURLConnection。它支持HTTP/2、WebSocket、异步请求和响应式流。

优势:

  • 无需额外依赖——内置于JDK中。
  • 支持HTTP/2及协议自动升级。
  • 便捷的API,支持同步和异步调用。
  • 内置对Cookie、重定向和认证的处理支持。

同步GET请求示例:

import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;

public class Java11HttpClientExample { 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")) .GET() .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("Status code: " + response.statusCode()); System.out.println("Body: " + response.body()); }}

异步POST请求示例:

import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpRequest.BodyPublishers;import java.util.concurrent.CompletableFuture;

public class AsyncPostExample { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://jsonplaceholder.typicode.com/posts")) .header("Content-Type", "application/json") .POST(BodyPublishers.ofString("{\\"title\\":\\"foo\\",\\"body\\":\\"bar\\",\\"userId\\":1}")) .build();

CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); future.thenAccept(response -> { System.out.println("Status: " + response.statusCode()); System.out.println("Body: " + response.body()); }).join(); }}


2. Apache HttpClient

来自Apache的经典库,长期以来一直是事实上的标准。最新版本(5.x)获得了显著改进:支持HTTP/2、改进的连接池处理以及更灵活的配置。

优势:

  • 最大的灵活性和精细配置(超时、拦截器、缓存)。
  • 久经考验的稳定性。
  • 支持多种认证方案(Basic、Digest、NTLM)。
  • 与代理和SSL的良好集成。

使用Apache HttpClient 5的GET请求示例:

import org.apache.hc.client5.http.classic.methods.HttpGet;import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;import org.apache.hc.client5.http.impl.classic.Clos                    

推荐