Java Request 修改请求头
在进行网络请求时,我们经常需要设置请求头来传递额外的信息。Java 提供了一种简单的方式来修改请求头,以满足我们的需求。本文将介绍如何使用 Java 修改请求头,并提供一些常见的示例代码。
什么是请求头?
在进行网络请求时,客户端需要向服务器发送请求。请求由请求行、请求头和请求体组成。其中,请求头是包含一些附加信息的部分,用于告诉服务器如何处理请求。
请求头是由键值对组成的,每一行都以一个冒号分隔键和值。常见的请求头有 "User-Agent"、"Content-Type" 等。
Java Request 类
在 Java 中,我们可以使用 java.net.HttpURLConnection
或 java.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 | 标识请求的身份验证信息 |