HTTP协议概述

HTTP(Hypertext Transfer Protocol)即超文本传输协议,它是用于在互联网上传输超文本的协议。它是一种无状态的应用层协议,这意味着每个请求都是独立的,服务器不会在不同请求之间保留任何信息。HTTP协议主要用于在客户端(如浏览器)和服务器之间传输数据,常见的Web页面、图片、视频等资源的传输都依赖于HTTP协议。

HTTP协议的工作流程通常如下:

  1. 客户端发起请求:客户端(如浏览器)向服务器发送一个HTTP请求,请求中包含请求方法(如GET、POST等)、请求的URL、请求头和可选的请求体。
  2. 服务器处理请求:服务器接收到请求后,根据请求的内容进行相应的处理。
  3. 服务器返回响应:服务器处理完请求后,向客户端返回一个HTTP响应,响应中包含状态码(如200表示成功,404表示未找到资源等)、响应头和响应体。
  4. 客户端接收响应:客户端接收服务器返回的响应,并根据响应的内容进行相应的处理。

使用Java发送HTTP请求和接收HTTP响应

在Java中,有多种方式可以发送HTTP请求和接收HTTP响应,下面分别介绍使用HttpURLConnectionHttpClient(Java 11及以上版本)的方法。

使用HttpURLConnection

HttpURLConnection是Java标准库中用于处理HTTP连接的类,以下是一个使用HttpURLConnection发送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) {
        try {
            // 创建URL对象
            URL url = new URL("https://www.example.com");

            // 打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法
            connection.setRequestMethod("GET");

            // 获取响应状态码
            int responseCode = connection.getResponseCode();
            System.out.println("响应状态码: " + responseCode);

            // 读取响应内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();

            // 输出响应内容
            System.out.println("响应内容: " + response.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码中,首先创建了一个URL对象,然后通过openConnection()方法打开一个连接,并将其转换为HttpURLConnection对象。接着设置请求方法为GET,获取响应状态码,最后读取并输出响应内容。

使用HttpClient(Java 11及以上版本)

Java 11引入了HttpClient类,它提供了更简洁、更强大的API来处理HTTP请求和响应。以下是一个使用HttpClient发送GET请求并接收响应的示例:

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

public class HttpClientExample {
    public static void main(String[] args) {
        try {
            // 创建HttpClient对象
            HttpClient client = HttpClient.newHttpClient();

            // 创建HttpRequest对象
            HttpRequest request = HttpRequest.newBuilder()
                   .uri(URI.create("https://www.example.com"))
                   .GET()
                   .build();

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

            // 输出响应状态码和内容
            System.out.println("响应状态码: " + response.statusCode());
            System.out.println("响应内容: " + response.body());

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

上述代码中,首先创建了一个HttpClient对象,然后使用HttpRequest.Builder构建一个GET请求,并通过client.send()方法发送请求并获取响应。最后输出响应状态码和内容。

综上所述,HttpURLConnection是Java早期处理HTTP请求的方式,而HttpClient是Java 11及以上版本提供的更现代化的方式,推荐使用HttpClient来处理HTTP请求和响应。