HTTP 响应 - HttpResponse
# HTTP 响应 - HttpResponse
简介
HttpResponse
是 Hutool 中用于表示 HTTP 响应的对象。当通过 HttpRequest.execute()
方法执行请求后,会返回一个 HttpResponse
对象。此对象包含了服务端的响应信息,例如状态码、响应内容、响应头等。HttpResponse
提供了多个方法方便开发者快速获取和处理服务端返回的数据。
# 1. 获取响应状态码 - getStatus
getStatus
方法用于获取 HTTP 响应的状态码。例如,200 表示请求成功,404 表示资源未找到等。
示例:获取 HTTP 响应状态码
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.core.lang.Console;
public class HttpResponseExample {
public static void main(String[] args) {
// 发送 POST 请求并获取响应
HttpResponse response = HttpRequest.post("https://example.com/api").execute();
// 获取响应状态码
int statusCode = response.getStatus();
Console.log("HTTP 状态码: {}", statusCode);
// 输出结果: HTTP 状态码: 200
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
getStatus()
:获取 HTTP 响应的状态码。- 返回值:返回整数类型的状态码,例如 200、404、500 等。
作用: 用于判断请求是否成功或出现错误,常用于对不同状态码的处理逻辑。
实际开发场景: 在发送请求后,需要根据状态码判断请求是否成功、是否需要重试或记录错误日志。
# 2. 获取响应内容 - body
、bodyBytes
、bodyStream
HttpResponse
提供了多种方法用于获取响应内容。最常用的方法是 body
,它返回响应内容的字符串形式。除此之外,还有 bodyBytes
和 bodyStream
方法,分别返回字节数组和输入流。
示例:获取响应内容
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.core.lang.Console;
public class HttpResponseExample {
public static void main(String[] args) {
// 发送 GET 请求并获取响应
HttpResponse response = HttpRequest.get("https://example.com/api").execute();
// 获取响应内容(字符串形式)
String responseBody = response.body();
Console.log("响应内容: {}", responseBody);
// 获取响应内容(字节数组形式)
byte[] responseBytes = response.bodyBytes();
Console.log("响应字节长度: {}", responseBytes.length);
// 获取响应内容(输入流形式)
InputStream responseStream = response.bodyStream();
// 此处可进一步处理输入流,如保存文件等操作
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
body()
:获取响应内容的字符串形式。- 返回值:返回响应内容的字符串,例如 HTML、JSON、XML 等。
bodyBytes()
:获取响应内容的字节数组形式。- 返回值:返回字节数组形式的响应内容,适用于二进制数据处理。
bodyStream()
:获取响应内容的输入流形式。- 返回值:返回
InputStream
,适用于大文件下载或流式处理。
- 返回值:返回
作用: 用于处理不同形式的响应内容,尤其是在处理二进制数据或需要流式读取时非常有用。
实际开发场景: 在请求返回较大的文件、图片、视频等资源时,使用 bodyStream
读取输入流更加高效;在处理文本数据如 JSON、XML 时,直接使用 body
方法即可。
# 3. 获取响应头信息 - header
HttpResponse
提供了 header
方法,用于获取响应头信息。可以通过预定义的头信息常量或自定义头信息名来获取具体的头信息内容。
示例:获取响应头信息
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.core.lang.Console;
import cn.hutool.http.Header;
public class HttpResponseExample {
public static void main(String[] args) {
// 发送 GET 请求并获取响应
HttpResponse response = HttpRequest.get("https://example.com/api").execute();
// 获取预定义的响应头信息(如内容编码)
String contentEncoding = response.header(Header.CONTENT_ENCODING);
Console.log("内容编码: {}", contentEncoding);
// 获取自定义的响应头信息(如内容类型)
String contentType = response.header("Content-Type");
Console.log("内容类型: {}", contentType);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
header(String name)
:根据头信息名获取对应的响应头内容。name
:头信息名称,可以使用 Hutool 提供的常量(如Header.CONTENT_ENCODING
)或自定义名称(如"Content-Type"
)。- 返回值:返回字符串形式的响应头内容。
作用: 用于获取响应头中的重要信息,如内容类型、编码格式、缓存控制等。
实际开发场景: 在处理文件下载、判断内容编码、缓存控制等场景中,通常需要获取响应头信息。
# 4. 判断响应内容是否使用 Gzip 压缩 - isGzip
有些服务器会使用 Gzip 对响应内容进行压缩,isGzip
方法可以帮助判断响应内容是否被 Gzip 压缩。
示例:判断响应内容是否使用 Gzip 压缩
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.core.lang.Console;
public class HttpResponseExample {
public static void main(String[] args) {
// 发送 GET 请求并获取响应
HttpResponse response = HttpRequest.get("https://example.com/api").execute();
// 判断响应内容是否使用 Gzip 压缩
boolean isGzip = response.isGzip();
Console.log("是否使用 Gzip 压缩: {}", isGzip);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
isGzip()
:判断响应内容是否使用 Gzip 压缩。- 返回值:返回布尔值,
true
表示内容使用 Gzip 压缩,false
表示未使用。
- 返回值:返回布尔值,
作用: 用于处理 Gzip 压缩的内容时,先判断是否需要解压缩。
实际开发场景: 在请求大文件或网页内容时,服务器可能会启用 Gzip 压缩,客户端需要判断并解压缩内容。