Java HTTP客户端:正确发送请求

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

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

开始课程
```html

HTTP 客户端在 Java 中:正确发送请求



在现代 Web 开发中,几乎没有任何应用程序能避免与远程服务器交互。无论是集成 REST API、加载数据还是提交表单——能够正确使用 Java 处理 HTTP 请求是开发者的必备技能。在本文中,我们将分析如何创建一个可靠的 Java HTTP 客户端,探讨现代方法和最佳实践。



为什么使用正确的 HTTP 客户端很重要?



许多初学者开发者使用过时的 HttpURLConnection 类,它早在 Java 1.1 中就已出现。虽然它仍然可用,但其 API 臃肿、不便且需要大量样板代码。从 Java 11 开始,标准库中引入了现代的 java.net.http.HttpClient,它提供了:

  • 支持 HTTP/2 和 WebSocket
  • 通过 CompletableFuture 实现异步请求
  • 简单易懂的 Builder 模式
  • 自动处理 Cookie 和重定向


Java 11+ 中 HttpClient 的基础用法



我们来看一个发送 GET 请求的基本示例。首先创建客户端实例,然后构建请求并发送它。



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

public class SimpleHttpClient { public static void main(String[] args) throws Exception { // 创建带有连接超时的客户端 HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();

// 构建 GET 请求 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .timeout(Duration.ofSeconds(30)) .header("Accept", "application/json") .GET() .build();

// 发送请求并获取响应 HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println("状态码: " + response.statusCode()); System.out.println("响应体: " + response.body()); }}


请注意使用 BodyHandlers.ofString()——这是以字符串形式获取响应体的便捷方式。如果需要处理 JSON,最好使用 BodyHandlers.ofInputStream() 并将其传递给解析器。



发送带有请求体的 POST 请求



为了向服务器发送数据(例如用户注册时),需要使用 POST 请求。我们来看一个发送 JSON 的示例:



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

public class PostRequestExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient();

String json = """ { "name": "伊万·伊万诺夫", "email": "ivan@example.com", "age": 30 } """;

HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/users")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .timeout(Duration.ofSeconds(15)) .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

if (response.statusCode() == 201) { System.out.println("用户创建成功!"); System.out.println("ID: " + response.body()); } else { System ```

博客

书籍推荐