gpt4 book ai didi

java - Java HTTP Client 是否处理压缩

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:19 24 4
gpt4 key购买 nike

我试图在新的 Java HTTP 客户端中找到任何关于压缩处理的提及,但失败了。是否有内置配置来处理例如gzipdeflate 压缩?

我希望有一个 BodyHandler 用于例如像这样:

HttpResponse.BodyHandlers.ofGzipped(HttpResponse.BodyHandlers.ofString())

但我没看到。我也没有在 HttpClient 中看到任何配置。我是不是找错地方了,或者这是故意没有实现并推迟到支持图书馆?

最佳答案

令我惊讶的是,新的 java.net.http 框架没有自动处理这个问题,但下面的代码对我来说可以处理作为 InputStream< 接收的 HTTP 响应 并且未压缩或使用 gzip 压缩:

public static InputStream getDecodedInputStream(
HttpResponse<InputStream> httpResponse) {
String encoding = determineContentEncoding(httpResponse);
try {
switch (encoding) {
case "":
return httpResponse.body();
case "gzip":
return new GZIPInputStream(httpResponse.body());
default:
throw new UnsupportedOperationException(
"Unexpected Content-Encoding: " + encoding);
}
} catch (IOException ioe) {
throw new UncheckedIOException(ioe);
}
}

public static String determineContentEncoding(
HttpResponse<?> httpResponse) {
return httpResponse.headers().firstValue("Content-Encoding").orElse("");
}

请注意,我没有添加对“deflate”类型的支持(因为我目前不需要它,而且我对“deflate”的了解越多,听起来越乱)。但我相信您可以通过向上述开关 block 添加检查并将 httpResponse.body() 包装在 InflaterInputStream 中来轻松支持“放气”。

关于java - Java HTTP Client 是否处理压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53502626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com