我想在Netty中测试一个ChannelInboundHandler,它的输入是HTTPFullRequest
。
这是我的帖子:
POST HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
paramA=dataA\
¶mB=dataB
我使用EmbbedChannel来测试处理程序,这是代码。
EmbeddedChannel channel = new EmbeddedChannel(
new ChannelInitializer<EmbeddedChannel>() {
@Override
protected void initChannel(EmbeddedChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
p.addLast("httpCodec", new HttpServerCodec());
p.addLast("aggregator", new HttpObjectAggregator(100000));
p.addLast("readPost", new ReadPost());
}
}
);
// input contains the post above.
assertTrue((channel.writeInbound(input.retain())));
但我的ReadPost
总是看到抱怨failure(java.lang.IllegalArgumentException: text is empty (possibly HTTP/0.9))
这是我的ReadPost处理程序快照:
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof FullHttpRequest) {
FullHttpRequest req = (FullHttpRequest) msg;
if (req.method().equals(HttpMethod.POST)) {
.....
}
谁知道为什么?提前谢谢。
答案 0 :(得分:0)
emmm。
这仅仅是http语法的错误。
interface Item {
Description: string;
Code: string;
}
需要主机名,正确的语法类似于POST HTTP/1.1
。
http标头也缺少POST / HTTP/1.1
。
是的,仅此而已。
我很傻。