从 Netty 中的 FullHttpResponse byteBuf 获取字符串内容
Posted
技术标签:
【中文标题】从 Netty 中的 FullHttpResponse byteBuf 获取字符串内容【英文标题】:getting string content from FullHttpResponse byteBuf in Netty 【发布时间】:2019-04-04 07:25:03 【问题描述】:我尝试了各种口味,但都给出了乱七八糟的结果。 但是浏览器上的响应看起来不错。 (干净的json字符串)
FullHttpResponse response = (FullHttpResponse) msg;
byte[] bytes = new byte[response.content().readableBytes()];
response.content().readBytes(bytes);
String result = new String(bytes);
我按照建议here尝试的另一个是
response.content().toString(CharsetUtil.UTF_8);
两者都是这样的胡言乱语
P.S:我在管道中使用 HttpObjectAggregator 和 HttpServerCodec
【问题讨论】:
【参考方案1】:您最有可能查看压缩数据,因为您正在处理FullHttpResponse
的实例,并且现在大多数服务器都使用压缩,因此您的数据很可能已被压缩。
要查看压缩背后的压缩算法,您应该查看response.headers().get(HttpHeaders.Names.CONTENT_ENCODING)
这可以返回不同值的组合(在多个记录的情况下以,
分隔):
gzip
: 数据使用 GZip 压缩
`deflate:使用deflate压缩数据
identity
: 没有进行压缩
br
: 数据是用brotli压缩的
使用FullHttpResponse
的一个优点是您不必担心使用中的传输编码,因为它会为您处理。
【讨论】:
您能对此发表看法吗? ***.com/questions/55600097/… 当我尝试获取压缩算法时,我只会得到 null 作为响应,即使你知道那不是真的。使用 littleproxy-mitm。 @MrKrisey 你能打印传输编码吗,代理和其他东西的某些组合使用该标头 谢谢。这解决了问题。另一个问题:我使用 FullHttpResponse 但内容仍然是压缩的。这不是您所说的 FullHttpResponse 的优势吗?以上是关于从 Netty 中的 FullHttpResponse byteBuf 获取字符串内容的主要内容,如果未能解决你的问题,请参考以下文章