Java Request 修改请求头

在进行网络请求时,我们经常需要设置请求头来传递额外的信息。Java 提供了一种简单的方式来修改请求头,以满足我们的需求。本文将介绍如何使用 Java 修改请求头,并提供一些常见的示例代码。

什么是请求头?

在进行网络请求时,客户端需要向服务器发送请求。请求由请求行、请求头和请求体组成。其中,请求头是包含一些附加信息的部分,用于告诉服务器如何处理请求。

请求头是由键值对组成的,每一行都以一个冒号分隔键和值。常见的请求头有 "User-Agent"、"Content-Type" 等。

Java Request 类

在 Java 中,我们可以使用 java.net.HttpURLConnectionjava.net.HttpClient 类来发送 HTTP 请求。这两个类提供了修改请求头的方法。

HttpURLConnection 是一个基于 URLConnection 的抽象类,用于发送 HTTP 请求。下面是一个使用 HttpURLConnection 发送 GET 请求并修改请求头的示例代码:

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

public class HttpRequestExample {

    public static void main(String[] args) throws IOException {
        URL url = new URL("
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        
        // 设置请求头
        connection.setRequestProperty("User-Agent", "Mozilla/5.0");
        
        // 发送 GET 请求
        connection.setRequestMethod("GET");
        
        // 获取响应
        int responseCode = connection.getResponseCode();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        StringBuilder responseBody = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            responseBody.append(line);
        }
        reader.close();
        
        // 打印响应
        System.out.println("Response Code: " + responseCode);
        System.out.println("Response Body:");
        System.out.println(responseBody.toString());
        
        // 关闭连接
        connection.disconnect();
    }
}

上述代码中,我们使用 setRequestProperty 方法来设置请求头的值。在这个示例中,我们设置了 "User-Agent" 请求头为 "Mozilla/5.0",以模拟一个浏览器发送的请求。然后,我们发送了一个 GET 请求,并读取并打印了响应。

Java HttpClient 类

Java 11 引入了一个新的 java.net.http.HttpClient 类,用于发送 HTTP 请求。这个类提供了更简洁的 API,并且也可以轻松地修改请求头。

下面是一个使用 HttpClient 发送 GET 请求并修改请求头的示例代码:

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

public class HttpClientExample {

    public static void main(String[] args) throws Exception {
        URI uri = new URI("
        
        // 创建 HttpClient
        HttpClient client = HttpClient.newHttpClient();
        
        // 创建 HttpRequest
        HttpRequest request = HttpRequest.newBuilder()
                .uri(uri)
                .header("User-Agent", "Mozilla/5.0")
                .GET()
                .build();
        
        // 发送请求
        CompletableFuture<HttpResponse<String>> responseFuture = 
                client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
        
        // 处理响应
        responseFuture.thenAccept(response -> {
            int statusCode = response.statusCode();
            String responseBody = response.body();
            
            // 打印响应
            System.out.println("Response Code: " + statusCode);
            System.out.println("Response Body:");
            System.out.println(responseBody);
        });
        
        // 等待响应完成
        responseFuture.join();
    }
}

上述代码中,我们使用 header 方法来设置请求头的值。在这个示例中,我们设置了 "User-Agent" 请求头为 "Mozilla/5.0"。然后,我们发送了一个 GET 请求,并异步地处理响应。

常见的请求头

下表列出了一些常见的请求头及其用途:

请求头名称 描述
User-Agent 标识客户端的用户代理
Referer 标识请求的源地址
Content-Type 标识请求或响应的媒体类型
Accept 标识客户端可接受的媒体类型
Authorization 标识请求的身份验证信息