netty 4.0.23中的DefaultHttpContent而不是HttpResponse
我有以下Http客户端的管道配置-netty 4.0.23中的DefaultHttpContent而不是HttpResponse,netty,Netty,我有以下Http客户端的管道配置- pipeline.addLast("ssl", new SslHandler()); pipeline.addLast("decoder", new HttpResponseDecoder()); pipeline.addLast("encoder", new HttpRequestEncoder()); pipeline.addLast("handler", new MySimpleChannelInboundHandler());
pipeline.addLast("ssl", new SslHandler());
pipeline.addLast("decoder", new HttpResponseDecoder());
pipeline.addLast("encoder", new HttpRequestEncoder());
pipeline.addLast("handler", new MySimpleChannelInboundHandler());
在MySimpleChannelInboundHandler
的channelRead0()
方法中,我得到了DefaultHttpContent
的一个实例,而不是HttpResponse
。当我使用-
DefaultHttpContent content = (DefaultHttpContent) msg;
LOG.debug(content.content().toString(CharsetUtil.UTF_8));
我可以看到正在记录的实际HTTP响应
为什么这个HTTP响应没有被解码成HttpResponse
对象,即使我在管道中有一个HTTP解码器
谢谢 在enc/解码器之前使用
HttpObjectAggregator
,以聚合httpResponse和所有以下HttpContent。在管道中添加HttpObjectAggregator
后,您将在处理程序中获得FullHttpResponse
对象
例如:p.addLast(“聚合器”,新的HttpObjectAggregator(1048576))代码>
还有一件事,如果您没有为客户端实现自己的enc/解码器,您可以使用netty提供的HttpClientCodec
我遇到了问题。HttpResponseDecoder
先前对HTTP连接请求的响应进行了解码。我没有覆盖isContentAlwaysEmpty(HttpMessage HttpMessage)
方法来为连接请求返回false。这使HttpResponseDecoder
处于不良状态。它希望响应中包含内容,但对HTTP CONNECT的响应中没有内容。当下一个请求的响应到达时,它被作为内容,而不是解码为HttpResponse
我扩展了HttpResponseDecoder
并覆盖(覆盖?isContentAlwaysEmpty(HttpMessage HttpMessage)
,为连接请求返回false,结果成功。这在“解码连接请求的响应”下的HttpResponseDecoder
中有记录。谢谢您的回复。我知道在HttpDecoder
之后在我的管道中使用HttpObjectAggregator
将导致FullHttpResponse
。但我的问题是,如果没有HttpObjectAggregator
,我应该得到一个HttpResponse
、0到nHttpContent
和一个LastHttpContent
。但是我只得到一个DefaultHttpContent
(它有正确的响应)。我尝试在解码器之后添加一个HttpObjectAggregator
,在聚合器的channelRead0()
处得到了一个NullPointerException
。此外,我无法使用HttpClientCodec
,因为我正在修改使用enc/dec的现有库。