ネッティープロキシHTTPとHTTPSのリクエスト

(1)キーコード

パッケージのテスト; 

輸入java.security.cert.CertificateException。

輸入javax.net.ssl.SSLException。

輸入io.netty.bootstrap.ServerBootstrap;
輸入io.netty.channel.ChannelFuture;
輸入io.netty.channel.ChannelOption。
輸入io.netty.channel.EventLoopGroup;
輸入io.netty.channel.nio.NioEventLoopGroup;
輸入io.netty.channel.socket.nio.NioServerSocketChannel。
輸入io.netty.handler.ssl.SslContext;
輸入io.netty.handler.ssl.SslContextBuilder;
輸入io.netty.handler.ssl.util.SelfSignedCertificate; 

パブリック クラスProxyServer {
     公共 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionある、CertificateException、SSLExceptionを{
         ブール SSL = // はSystem.getProperty( "SSL")!= NULL; 
        int型 PORT = Integer.parseInt(はSystem.getProperty( "ポート"を、SSL "5688"?: "8080" )); 
        
         最終SSLContextのsslCtx。
         もし(SSL){ 
             自己署名証明書のSSC = 新たな自己署名証明書()。
             sslCtx = SslContextBuilder.forServer(ssc.certificate()、ssc.privateKey())()を構築します。
         }{ 
             sslCtx = NULL ; 
         } 
         
        EventLoopGroup bossGroup = 新しいNioEventLoopGroup()。
        EventLoopGroup WORKGROUP = 新しいNioEventLoopGroup();
        試す{ 
            ServerBootstrapのB = 新しいServerBootstrap()。
            b.group(bossGroup、ワークグループ).channel(NioServerSocketChannel。クラス).OPTION(ChannelOption.SO_BACKLOG、128 
                    .childOption(ChannelOption.SO_KEEPALIVE、).OPTION(ChannelOption.CONNECT_TIMEOUT_MILLIS、6000 
                    .childHandler(新しいProxyServiceInit(sslCtx)); 

            ChannelFutureのF = b.bind(PORT).sync(); 
            System.out.println( "端口号:" + PORT)。
            。f.channel()closeFuture()同期()。
        } 最後に{ 
            workGroup.shutdownGracefully()。
            bossGroup.shutdownGracefully(); 
        } 
    } 
}
パッケージのテスト; 

輸入io.netty.channel.Channel。
輸入io.netty.channel.ChannelInitializer;
輸入io.netty.channel.ChannelPipeline;
輸入io.netty.handler.codec.http.HttpServerCodec;
輸入io.netty.handler.ssl.SslContext; 

パブリック クラス ProxyServiceInitは拡張 ChannelInitializer <チャンネル> {
     民間 最終SSLContextのsslCtxを。
    
    公共ProxyServiceInit(SSLContextのsslCtx){ 
         この .sslCtx = sslCtx。
    } 

    @Overrideは
    保護され 、ボイドinitChannel(チャンネルチャネル)がスロー{例外
        ChannelPipeline P = channel.pipeline()。
        System.out.println( "ProxyServiceInit" );
        もし(!sslCtx = NULL ){ 
            p.addLast(sslCtx.newHandler(channel.alloc()))。
        } 
        p.addLast( "httpcode"、HttpServerCodec())。
        p.addLast( "HTTPServiceの"、新しいHTTPServiceの()); 
        
    } 
}
パッケージのテスト; 

輸入java.security.cert.CertificateException。

輸入javax.net.ssl.SSLException。

輸入io.netty.bootstrap.ServerBootstrap;
輸入io.netty.channel.ChannelFuture;
輸入io.netty.channel.ChannelOption。
輸入io.netty.channel.EventLoopGroup;
輸入io.netty.channel.nio.NioEventLoopGroup;
輸入io.netty.channel.socket.nio.NioServerSocketChannel。
輸入io.netty.handler.ssl.SslContext;
輸入io.netty.handler.ssl.SslContextBuilder;
輸入io.netty.handler.ssl.util.SelfSignedCertificate; 

パブリック クラスProxyServer {
     公共 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionある、CertificateException、SSLExceptionを{
         ブール SSL = // はSystem.getProperty( "SSL")!= NULL; 
        int型 PORT = Integer.parseInt(はSystem.getProperty( "ポート"を、SSL "5688"?: "8080" )); 
        
         最終SSLContextのsslCtx。
         もし(SSL){ 
             自己署名証明書のSSC = 新たな自己署名証明書()。
             sslCtx = SslContextBuilder.forServer(ssc.certificate()、ssc.privateKey())()を構築します。
         }{ 
             sslCtx = NULL ; 
         } 
         
        EventLoopGroup bossGroup = 新しいNioEventLoopGroup()。
        EventLoopGroup WORKGROUP = 新しいNioEventLoopGroup();
        試す{ 
            ServerBootstrapのB = 新しいServerBootstrap()。
            b.group(bossGroup、ワークグループ).channel(NioServerSocketChannel。クラス).OPTION(ChannelOption.SO_BACKLOG、128 
                    .childOption(ChannelOption.SO_KEEPALIVE、).OPTION(ChannelOption.CONNECT_TIMEOUT_MILLIS、6000 
                    .childHandler(新しいProxyServiceInit(sslCtx)); 

            ChannelFutureのF = b.bind(PORT).sync(); 
            System.out.println( "端口号:" + PORT)。
            。f.channel()closeFuture()同期()。
        } 最後に{ 
            workGroup.shutdownGracefully()。
            bossGroup.shutdownGracefully(); 
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/excellencesy/p/11262655.html