Java HTTP客户端:从A到Z正确发送请求

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

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

开始课程

Java HTTP 客户端:从 A 到 Z 正确发送请求



在现代 Java 开发中,与外部 Web 服务和 REST API 的交互已成为几乎所有应用程序不可或缺的一部分。无论您是在编写微服务、移动应用还是企业系统,正确发送 HTTP 请求的能力都是一项至关重要的技能。在本文中,我们将详细讲解在 Java 中创建 HTTP 客户端的所有方法:从经典的 HttpURLConnection 到现代库,如 java.net.http.HttpClient、OkHttp 和 RestTemplate。您将学习如何执行 GET、POST、PUT 和 DELETE 请求,处理响应,以及如何为您的任务选择合适的工具。



1. 经典方法:HttpURLConnection



多年来,在 Java 中处理 HTTP 的标准方式是使用 HttpURLConnection 类。它是 JDK 的一部分,不需要额外的依赖。然而,它的 API 被认为是低级别的且笨重的,特别是对于复杂的请求。



GET 请求示例:

import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;

public class HttpURLConnectionExample { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/users"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json");

int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode);

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Response: " + response.toString()); }}


带 JSON 的 POST 请求示例:

import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;

public class PostExample { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/users"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true);

String jsonInputString = "{\\"name\\": \\"John\\", \\"age\\": 30}"; try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); }

int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); }}


优点: 内置于 JDK,无需库。
缺点: 代码复杂,不支持 HTTP/2,处理超时和错误不方便。



2. 现代 HttpClient (Java 11+)



从 Java 11 开始,标准库中添加了新的 java.net.http.HttpClient。它支持 HTTP/2、WebSocket、异步请求,并提供了更简洁、更现代的 API。



同步 GET 请求:

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

public class ModernHttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://a

博客

书籍推荐