当前位置:首页 > Java > 正文

Java HttpURLConnection 详解(从零开始掌握 Java HTTP 请求)

在 Java 开发中,经常需要与 Web 服务器进行通信,比如获取网页内容、调用 RESTful API 等。Java 标准库提供了 HttpURLConnection 类,它是 java.net 包的一部分,用于发送 HTTP 请求和接收响应。本教程将带你从零开始学习 Java HttpURLConnection 的基本用法,即使你是编程小白,也能轻松上手!

Java HttpURLConnection 详解(从零开始掌握 HTTP 请求)  HTTP请求教程 HttpURLConnection使用方法 Java网络编程 第1张

什么是 HttpURLConnection?

HttpURLConnection 是 Java 内置的用于处理 HTTP 协议的类。它继承自 URLConnection,专门用于发起 HTTP/HTTPS 请求。相比第三方库(如 Apache HttpClient 或 OkHttp),它的优势在于无需额外依赖,适合轻量级项目或学习用途。

准备工作

确保你已安装 JDK 并配置好开发环境。本教程使用 Java 8 及以上版本。

发送 GET 请求

GET 请求是最常见的 HTTP 请求类型,用于从服务器获取数据。下面是一个完整的示例:

import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;public class HttpGetExample {    public static void main(String[] args) {        try {            // 1. 创建 URL 对象            URL url = new URL("https://jsonplaceholder.typicode.com/posts/1");                        // 2. 打开连接            HttpURLConnection connection = (HttpURLConnection) url.openConnection();                        // 3. 设置请求方法(默认就是 GET,可省略)            connection.setRequestMethod("GET");                        // 4. 设置超时时间(可选)            connection.setConnectTimeout(5000);            connection.setReadTimeout(5000);                        // 5. 获取响应码            int responseCode = connection.getResponseCode();            System.out.println("Response Code: " + responseCode);                        // 6. 读取响应内容            BufferedReader in = new BufferedReader(                new InputStreamReader(connection.getInputStream())            );            String inputLine;            StringBuilder content = new StringBuilder();            while ((inputLine = in.readLine()) != null) {                content.append(inputLine);            }            in.close();                        // 7. 打印结果            System.out.println("Response Body: " + content.toString());                        // 8. 断开连接            connection.disconnect();                    } catch (Exception e) {            e.printStackTrace();        }    }}  

发送 POST 请求

POST 请求通常用于向服务器提交数据,比如表单或 JSON 数据。以下是发送 JSON 数据的 POST 示例:

import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.nio.charset.StandardCharsets;public class HttpPostExample {    public static void main(String[] args) {        try {            URL url = new URL("https://jsonplaceholder.typicode.com/posts");            HttpURLConnection connection = (HttpURLConnection) url.openConnection();                        // 设置请求方法为 POST            connection.setRequestMethod("POST");            connection.setDoOutput(true); // 允许输出                        // 设置请求头            connection.setRequestProperty("Content-Type", "application/json; utf-8");                        // 准备要发送的 JSON 数据            String jsonInputString = "{\"title\": \"Hello\", \"body\": \"This is a test post\", \"userId\": 1}";                        // 发送请求体            try (OutputStream os = connection.getOutputStream()) {                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);                os.write(input, 0, input.length);            }                        // 读取响应            int responseCode = connection.getResponseCode();            System.out.println("Response Code: " + responseCode);                        // 注意:POST 成功后通常返回 201 Created            BufferedReader in = new BufferedReader(                new InputStreamReader(connection.getInputStream())            );            String inputLine;            StringBuilder content = new StringBuilder();            while ((inputLine = in.readLine()) != null) {                content.append(inputLine);            }            in.close();                        System.out.println("Response: " + content.toString());            connection.disconnect();                    } catch (Exception e) {            e.printStackTrace();        }    }}  

常见注意事项

  • 关闭连接:使用完后务必调用 disconnect() 释放资源。
  • 异常处理:网络请求可能失败,务必使用 try-catch 捕获异常。
  • HTTPS 支持HttpURLConnection 自动支持 HTTPS,无需额外配置。
  • 线程安全:每个 HttpURLConnection 实例不是线程安全的,不要在多个线程中共享同一个实例。

总结

通过本教程,你已经掌握了 Java HttpURLConnection 使用方法,包括如何发送 GET 和 POST 请求。虽然 HttpURLConnection 功能强大且无需依赖,但在实际项目中,如果需要更复杂的特性(如连接池、自动重试等),建议使用 OkHttp 或 Spring WebClient 等现代库。

希望这篇 Java HTTP请求教程 能帮助你顺利入门 Java网络编程!动手试试吧,实践是最好的老师。