处理http Keep-Alive连接时,如何使用netty将响应映射到请求url

argszero_stack

我想阅读支持http 1.1保持生命的同一站点的URL列表。

我尝试使用netty做到这一点,并且可以正常工作。

但是当我得到响应时,我无法确定它是针对哪个URL的。

我如何从方法message中获取请求的URL

 public static void main(String[] args) throws InterruptedException, URISyntaxException {
    String host = "localhost";
    int port = 8080;
    String[] paths = new String[]{"1.html", "2.html", "3.html"};
    EventLoopGroup group = new NioEventLoopGroup();
    Bootstrap b = new Bootstrap();
    b.group(group)
            .channel(NioSocketChannel.class)
            .handler(new ChannelInitializer<SocketChannel>() {
                @Override
                protected void initChannel(SocketChannel ch) throws Exception {
                    ChannelPipeline p = ch.pipeline();
                    p.addLast(new HttpClientCodec());
                    p.addLast(new HttpContentDecompressor());
                    p.addLast(new SimpleChannelInboundHandler<HttpObject>() {
                        @Override
                        protected void messageReceived(ChannelHandlerContext ctx, HttpObject msg) throws Exception {
                            if (msg instanceof HttpContent) {
                                HttpContent content = (HttpContent) msg;
                                System.out.println("response from url ?:" + content.content().toString());
                            }
                        }
                    });
                }
            });

    Channel ch = b.connect(host, port).sync().channel();
    for (String path : paths) {
        HttpRequest request = new DefaultFullHttpRequest(
                HttpVersion.HTTP_1_1, HttpMethod.GET, path);
        request.headers().set(HttpHeaderNames.HOST, host);
        request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
        request.headers().set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP);
        ch.writeAndFlush(request);
    }
Suvitruf-安德烈·阿帕纳西克(Andrei Apanasik)

尝试这个:

 p.addLast(new SimpleChannelInboundHandler<Object>() {
     @Override
     public void channelRead(ChannelHandlerContext ctx, Object msg) {
         if (msg instanceof HttpRequest) {
            System.out.println("I'm HttpRequest");

            FullHttpRequest req = (FullHttpRequest) msg;

            if (HttpHeaders.is100ContinueExpected(req)) {
                 ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE));
            }

            System.out.println("response from url ?:" + req.getUri());
            ByteBuf content = req.content();
         }
     }
 });

不知道您使用的是什么版本的netty。如果是5.0+,请重命名channelReadmessageReceived

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试重用HTTP连接来处理Keep-Alive标头时,通过从客户端读取第二个请求来阻止recv

来自分类Dev

Connection:keep-alive没有在NodeJS中保持HTTP请求的套接字连接

来自分类Dev

Explain http keep-alive mechanism

来自分类Dev

HTTP Keep-Alive 到不同的主机

来自分类Dev

您可以通过HTTP代理使用CONNECT请求的Keep-Alive吗?

来自分类Dev

使用AsyncTask时应如何处理HTTP响应代码?

来自分类Dev

HTTP Keep-Alive是否可以维持长时间的轮询?

来自分类Dev

$ http请求的后台处理通知

来自分类Dev

angular指令处理http请求

来自分类Dev

处理异常HTTP请求波动

来自分类Dev

Bot无法处理Http请求

来自分类Dev

在JavaScript中处理HTTP请求

来自分类Dev

NodeJS HTTP请求处理程序

来自分类Dev

IIS 中的 HTTP 请求处理

来自分类Dev

处理未找到的 Http 请求

来自分类Dev

请求和响应处理之间的HTTP断开连接/超时

来自分类Dev

重复处理丢弃的HTTP连接

来自分类Dev

不成功处理请求的HTTP响应

来自分类Dev

XML HTTP 请求 - 处理连接丢失

来自分类Dev

使用NSURLSession处理HTTP错误?

来自分类Dev

Keep HTTP or HTTPS on .htaccess

来自分类Dev

将http响应映射到typeScript对象

来自分类Dev

使用Golang通道处理HTTP请求

来自分类Dev

使用MVVM处理HTTP GET请求

来自分类Dev

使用HTTP请求处理飞行模式

来自分类Dev

使用多个线程处理单个 HTTP 请求

来自分类Dev

使用 WKWebView 代理处理 HTTP 请求

来自分类Dev

如何查看HTTP服务器的Keep-alive超时时间?

来自分类常见问题

如何在处理速率限制时异步发送HTTP请求?