<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    皮杜妮

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      887 Posts :: 3 Stories :: 7 Comments :: 0 Trackbacks
    netty是一套高性能的通訊架構,這里我用netty實現http服務器實現信息采集功能。主要是利用他現有的hander處理器,解析出request頭,做信息采集使用,重寫了他自己的hander.


    package io.netty.example.http.snoop;

    import static io.netty.handler.codec.http.HttpHeaders.getHost;
    import static io.netty.handler.codec.http.HttpHeaders.isKeepAlive;
    import static io.netty.handler.codec.http.HttpHeaders.Names.CONNECTION;
    import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_LENGTH;
    import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
    import static io.netty.handler.codec.http.HttpHeaders.Names.COOKIE;
    import static io.netty.handler.codec.http.HttpHeaders.Names.SET_COOKIE;
    import static io.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST;
    import static io.netty.handler.codec.http.HttpResponseStatus.OK;
    import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;

    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.Map.Entry;

    import io.netty.buffer.ByteBuf;
    import io.netty.buffer.Unpooled;
    import io.netty.channel.ChannelHandlerContext;
    import io.netty.channel.SimpleChannelInboundHandler;
    import io.netty.handler.codec.http.Cookie;
    import io.netty.handler.codec.http.CookieDecoder;
    import io.netty.handler.codec.http.DefaultFullHttpResponse;
    import io.netty.handler.codec.http.FullHttpResponse;
    import io.netty.handler.codec.http.HttpContent;
    import io.netty.handler.codec.http.HttpHeaders;
    import io.netty.handler.codec.http.HttpObject;
    import io.netty.handler.codec.http.HttpRequest;
    import io.netty.handler.codec.http.LastHttpContent;
    import io.netty.handler.codec.http.QueryStringDecoder;
    import io.netty.handler.codec.http.ServerCookieEncoder;
    import io.netty.util.CharsetUtil;

    public class HttpSnoopServiceTxt extends SimpleChannelInboundHandler<Object> {

        private HttpRequest request;
        /** Buffer that stores the response content */
        private final StringBuilder buf = new StringBuilder();

        @Override
        protected void channelRead0(ChannelHandlerContext ctx, Object msg)
                throws Exception {
            // TODO Auto-generated method stub
            if (msg instanceof HttpRequest) {
                HttpRequest request = this.request = (HttpRequest) msg;
                buf.setLength(0);
                // hostname
                buf.append("HOSTNAME:").append(getHost(request, "unknown"));
                // url
                buf.append("REQUEST_URI:").append(request.getUri());
                // parm
                QueryStringDecoder queryStringDecoder = new QueryStringDecoder(request.getUri());
                Map<String, List<String>> params = queryStringDecoder.parameters();
                if (!params.isEmpty()) {
                    for (Entry<String, List<String>> p : params.entrySet()) {
                        String key = p.getKey();
                        List<String> vals = p.getValue();
                        for (String val : vals) {
                            buf.append("PARAM:").append(key).append("=")
                                    .append(val);
                        }
                    }
                }
                //cookie
                
            }
            if (msg instanceof HttpContent) {
                if (msg instanceof LastHttpContent) {
                    LastHttpContent trailer = (LastHttpContent) msg;
                    writeResponse(trailer, ctx);
                    WriterFile.printtxt(buf.toString());
                }
            }
        }

        @Override
        public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
            ctx.flush();
        }

        private boolean writeResponse(HttpObject currentObj,ChannelHandlerContext ctx) {
            boolean keepAlive = isKeepAlive(request);
            FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1,
                    currentObj.getDecoderResult().isSuccess() ? OK : BAD_REQUEST,
                    Unpooled.copiedBuffer(buf.toString(), CharsetUtil.UTF_8));
            response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
            if (keepAlive) {
                response.headers().set(CONTENT_LENGTH,
                        response.content().readableBytes());
                response.headers().set(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
            }
            ctx.write(response);
            return keepAlive;
        }

    }


    /*
     * Copyright 2012 The Netty Project
     *
     * The Netty Project licenses this file to you under the Apache License,
     * version 2.0 (the "License"); you may not use this file except in compliance
     * with the License. You may obtain a copy of the License at:
     *
     *   http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     * License for the specific language governing permissions and limitations
     * under the License.
     */
    package io.netty.example.http.snoop;

    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.channel.Channel;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioServerSocketChannel;

    /**
     * An HTTP server that sends back the content of the received HTTP request
     * in a pretty plaintext form.
     */
    public class HttpSnoopServer {

        private final int port;

        public HttpSnoopServer(int port) {
            this.port = port;
        }

        public void run() throws Exception {
            // Configure the server.
            EventLoopGroup bossGroup = new NioEventLoopGroup();
            EventLoopGroup workerGroup = new NioEventLoopGroup();
            try {
                ServerBootstrap b = new ServerBootstrap();
                b.group(bossGroup, workerGroup)
                 .channel(NioServerSocketChannel.class)
                 .childHandler(new HttpSnoopServerInitializer());

                Channel ch = b.bind(port).sync().channel();
                ch.closeFuture().sync();
            } finally {
                bossGroup.shutdownGracefully();
                workerGroup.shutdownGracefully();
            }
        }

        public static void main(String[] args) throws Exception {
            int port;
            if (args.length > 0) {
                port = 8080;
            } else {
                port = 8080;
            }
            new HttpSnoopServer(port).run();
        }
    }
    /*
     * Copyright 2012 The Netty Project
     *
     * The Netty Project licenses this file to you under the Apache License,
     * version 2.0 (the "License"); you may not use this file except in compliance
     * with the License. You may obtain a copy of the License at:
     *
     *   http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     * License for the specific language governing permissions and limitations
     * under the License.
     */
    package io.netty.example.http.snoop;

    import io.netty.channel.ChannelInitializer;
    import io.netty.channel.ChannelPipeline;
    import io.netty.channel.socket.SocketChannel;
    import io.netty.handler.codec.http.HttpRequestDecoder;
    import io.netty.handler.codec.http.HttpResponseEncoder;

    public class HttpSnoopServerInitializer extends ChannelInitializer<SocketChannel> {
        @Override
        public void initChannel(SocketChannel ch) throws Exception {
            // Create a default pipeline implementation.
            ChannelPipeline p = ch.pipeline();

            // Uncomment the following line if you want HTTPS
            //SSLEngine engine = SecureChatSslContextFactory.getServerContext().createSSLEngine();
            //engine.setUseClientMode(false);
            //p.addLast("ssl", new SslHandler(engine));

            p.addLast("decoder", new HttpRequestDecoder());
            // Uncomment the following line if you don't want to handle HttpChunks.
            //p.addLast("aggregator", new HttpObjectAggregator(1048576));
            p.addLast("encoder", new HttpResponseEncoder());
            // Remove the following line if you don't want automatic content compression.
            //p.addLast("deflater", new HttpContentCompressor());
            
            p.addLast("handler", new HttpSnoopServiceTxt());
            //p.addLast("handler", new HttpSnoopServerHandler());
        }
    }
    posted on 2013-11-23 15:54 豬眼睛 閱讀(1683) 評論(0)  編輯  收藏 所屬分類: netty
    主站蜘蛛池模板: 亚洲欧洲自拍拍偷精品 美利坚| 18禁成年无码免费网站无遮挡 | 一级特黄录像免费播放中文版| AV免费网址在线观看| 亚洲成综合人影院在院播放| 99精品国产成人a∨免费看| 亚洲国产成人久久综合一 | gogo免费在线观看| 亚洲人色大成年网站在线观看| 你懂的免费在线观看| 亚洲国产一成人久久精品| 成人性生交大片免费看中文| 亚洲人精品午夜射精日韩| 国产成人AV免费观看| 久久夜色精品国产噜噜噜亚洲AV| 一区二区免费视频| 亚洲大尺码专区影院| 性一交一乱一视频免费看| 小说专区亚洲春色校园| 亚洲人午夜射精精品日韩| 中文成人久久久久影院免费观看 | 日本最新免费网站| 亚洲AV色吊丝无码| 日本不卡视频免费| caoporm碰最新免费公开视频| 亚洲中文字幕无码日韩| 爱情岛论坛亚洲品质自拍视频网站 | 国产一区二区三区免费视频| 美女视频免费看一区二区| 免费a级毛片高清视频不卡 | mm1313亚洲精品无码又大又粗| GOGOGO免费观看国语| 亚洲高清资源在线观看| 成人免费777777| 一级有奶水毛片免费看| 亚洲成人福利在线| 免费观看午夜在线欧差毛片 | AV激情亚洲男人的天堂国语| 国产亚洲AV夜间福利香蕉149 | 国产91色综合久久免费| 国产亚洲视频在线观看网址|