首页 > 解决方案 > 如何在 Reactor-Netty 中获取压缩响应的长度?

问题描述

httpClient.post().uri(getSearchUrl())
                    .send(Mono.just(Unpooled.wrappedBuffer(bytes)))
                    .responseSingle((resp, buf) -> {
                        return buf;
                    })
                    .map(ByteBuf::retain)
                    .map(byteBuf -> {
                        response.setResponseBodyStream(new ByteBufInputStream(byteBuf, true));
                        return response;
                    });

在该方法responseSingle中,响应已经未压缩。那么我怎样才能得到压缩响应的长度呢?谢谢。

标签: reactor-netty

解决方案


检查响应标头。您可能有标题“Content-Length”,它应该告诉您响应大小。

否则,您可以将主体作为 ByteArrayResource 获取并检查字节数组的大小。

.exchange()
.flatMap(clientResponse -> clientResponse.bodyToMono(ByteArrayResource.class)
     .flatMap(responseBodyByteArray -> checkSize(responseBodyByteArray.getByteArray().length))
 )

推荐阅读