zoukankan      html  css  js  c++  java
  • netty代理http&https请求

    (1)关键代码

    package test;
    
    import java.security.cert.CertificateException;
    
    import javax.net.ssl.SSLException;
    
    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.channel.ChannelFuture;
    import io.netty.channel.ChannelOption;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioServerSocketChannel;
    import io.netty.handler.ssl.SslContext;
    import io.netty.handler.ssl.SslContextBuilder;
    import io.netty.handler.ssl.util.SelfSignedCertificate;
    
    public class ProxyServer {
        public static void main(String[] args) throws InterruptedException, CertificateException, SSLException {
            boolean SSL = false;//System.getProperty("ssl") != null;
            int PORT = Integer.parseInt(System.getProperty("port", SSL? "5688" : "8080"));
            
             final SslContext sslCtx;
             if (SSL) {
                 SelfSignedCertificate ssc = new SelfSignedCertificate();
                 sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();
             } else {
                 sslCtx = null;
             }
             
            EventLoopGroup bossGroup = new NioEventLoopGroup();
            EventLoopGroup workGroup = new NioEventLoopGroup();
            try {
                ServerBootstrap b = new ServerBootstrap();
                b.group(bossGroup, workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 128)
                        .childOption(ChannelOption.SO_KEEPALIVE, true).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 6000)
                        .childHandler(new ProxyServiceInit(sslCtx));
    
                ChannelFuture f = b.bind(PORT).sync();
                System.out.println("端口号:"+PORT);
                f.channel().closeFuture().sync();
            } finally {
                workGroup.shutdownGracefully();
                bossGroup.shutdownGracefully();
            }
        }
    }
    package test;
    
    import io.netty.channel.Channel;
    import io.netty.channel.ChannelInitializer;
    import io.netty.channel.ChannelPipeline;
    import io.netty.handler.codec.http.HttpServerCodec;
    import io.netty.handler.ssl.SslContext;
    
    public class ProxyServiceInit extends ChannelInitializer<Channel> {
        private final SslContext sslCtx;
        
        public ProxyServiceInit(SslContext sslCtx) { 
            this.sslCtx = sslCtx;
        }
    
        @Override
        protected void initChannel(Channel channel) throws Exception {
            ChannelPipeline p = channel.pipeline();
            System.out.println("ProxyServiceInit");
            if (sslCtx != null) {
                p.addLast(sslCtx.newHandler(channel.alloc()));
            }
            p.addLast("httpcode", new HttpServerCodec());
            p.addLast("httpservice", new HttpService());
            
        }
    }
    package test;
    
    import java.security.cert.CertificateException;
    
    import javax.net.ssl.SSLException;
    
    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.channel.ChannelFuture;
    import io.netty.channel.ChannelOption;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioServerSocketChannel;
    import io.netty.handler.ssl.SslContext;
    import io.netty.handler.ssl.SslContextBuilder;
    import io.netty.handler.ssl.util.SelfSignedCertificate;
    
    public class ProxyServer {
        public static void main(String[] args) throws InterruptedException, CertificateException, SSLException {
            boolean SSL = false;//System.getProperty("ssl") != null;
            int PORT = Integer.parseInt(System.getProperty("port", SSL? "5688" : "8080"));
            
             final SslContext sslCtx;
             if (SSL) {
                 SelfSignedCertificate ssc = new SelfSignedCertificate();
                 sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();
             } else {
                 sslCtx = null;
             }
             
            EventLoopGroup bossGroup = new NioEventLoopGroup();
            EventLoopGroup workGroup = new NioEventLoopGroup();
            try {
                ServerBootstrap b = new ServerBootstrap();
                b.group(bossGroup, workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 128)
                        .childOption(ChannelOption.SO_KEEPALIVE, true).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 6000)
                        .childHandler(new ProxyServiceInit(sslCtx));
    
                ChannelFuture f = b.bind(PORT).sync();
                System.out.println("端口号:"+PORT);
                f.channel().closeFuture().sync();
            } finally {
                workGroup.shutdownGracefully();
                bossGroup.shutdownGracefully();
            }
        }
    }
  • 相关阅读:
    今天是元旦啊
    [待解决]python 函数加括号和不加括号的区别
    Jupyter Notebook的快捷键列表误操作发现的新大陆
    Series选择和过滤
    做鸢尾花切片练习中的'&'问题:(&,|)和(and,or)
    报错合集
    关于随机数种子seed的问题尽量使用numpy下的seed
    pandas创建Series序列/hashable
    在jupyter notebook中插入截图
    xml反序列化时,如何生成与之对应的类文件
  • 原文地址:https://www.cnblogs.com/excellencesy/p/11262655.html
Copyright © 2011-2022 走看看