netty test: как отправить сообщение обработчику - PullRequest
0 голосов
/ 02 июня 2018

Я хочу протестировать ChannelInboundHandler в Netty, это ввод 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 голосов
/ 20 июня 2018

ммм.

Это просто ошибка синтаксиса http.

POST HTTP/1.1 требуется имя хоста, правильный синтаксис похож на POST / HTTP/1.1.

httpв заголовке также отсутствует Content-Length.

да, вот и все.

Я так глуп.

...