从Netty中的FullHttpResponse byteBuf获取字符串内容

从Netty中的FullHttpResponse byteBuf获取字符串内容,netty,Netty,我试过各种口味,结果都很可笑。 但浏览器上的响应看起来不错。(干净的json字符串) 我建议的另一个方法是 两人都像这样胡言乱语 注:我在管道中使用HttpObjectAggregator和HttpServerCodec,您很可能看到的是压缩数据,因为您处理的是FullHttpResponse的实例,而且现在大多数服务器都使用压缩,所以您的数据很可能被压缩 要查看压缩背后的压缩算法,您应该查看response.headers().get(HttpHeaders.Names.CONTENT\u编

我试过各种口味,结果都很可笑。 但浏览器上的响应看起来不错。(干净的json字符串)

我建议的另一个方法是

两人都像这样胡言乱语


注:我在管道中使用HttpObjectAggregator和HttpServerCodec,您很可能看到的是压缩数据,因为您处理的是
FullHttpResponse的实例,而且现在大多数服务器都使用压缩,所以您的数据很可能被压缩

要查看压缩背后的压缩算法,您应该查看
response.headers().get(HttpHeaders.Names.CONTENT\u编码)

这可以返回不同值的组合(在多个录制的情况下由
分隔):

  • gzip
    :使用gzip压缩数据
  • `deflate:使用deflate压缩数据
  • 标识
    :未进行压缩
  • br
    :使用brotli压缩数据

使用
FullHttpResponse
的一个优点是,您不必担心正在使用的传输编码,因为它可以为您处理这些问题。

您能谈谈您的想法吗?当我尝试获取压缩算法时,我只得到null作为响应,即使我知道这不是真的。使用littleproxy mitm。@Krisey先生,您能打印传输编码吗?一些代理和其他东西的组合使用headerThanks。这就解决了问题。另一个问题:我使用FullHttpResponse,但内容仍然是压缩的。这难道不是你所说的完整HttpResponse的优势吗?
    FullHttpResponse response = (FullHttpResponse) msg;
    byte[] bytes = new byte[response.content().readableBytes()];
    response.content().readBytes(bytes);
    String result = new String(bytes);
response.content().toString(CharsetUtil.UTF_8);