netty test:如何将帖子发送给处理程序

时间:2018-06-02 08:49:50

标签: java http post netty

我想在Netty中测试一个ChannelInboundHandler,它的输入是HTTPFullRequest

这是我的帖子:

POST  HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
paramA=dataA\
&paramB=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)) {
            .....
        }
谁知道为什么?提前谢谢。

1 个答案:

答案 0 :(得分:0)

emmm。

这仅仅是http语法的错误。

interface Item { Description: string; Code: string; } 需要主机名,正确的语法类似于POST HTTP/1.1

http标头也缺少POST / HTTP/1.1

是的,仅此而已。

我很傻。