微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactor-netty 中的 HTTPS 代理实现

如何解决reactor-netty 中的 HTTPS 代理实现

我正在尝试使用 Reactor Netty 编写一个简单的 HTTPS 代理。 因此,当它接收到 CONNECT 方法时,它应该使用 TcpClient 向所需的主机发出请求,并将结果返回给客户端。

我试过这样做:

void init() {
    disposableServer server = HttpServer.create()
            .host("localhost")
            .port(8080)
            .handle((request,response) -> { 
                if (request.method() == HttpMethod.CONNECT) {
                    return tcpClient(request,response);
                }
            } )
            .bindNow();
    
    server.ondispose()
            .block();
}
        
Mono<Void> tcpClient(HttpServerRequest request,HttpServerResponse response) {
    URL url;
    try {
        url = new URL("https://" + request.requestHeaders().get("host"));
    } catch (MalformedURLException e) {
        return Mono.error(e);
    }
    
    String connectResponse = "HTTP/1.0 200 Connection established\n" +
            "\r\n";
    
    return TcpClient.create()
        .host(url.getHost())
        .port(url.getPort())
        .connect()
        .flatMap(connection -> response.sendString(Mono.just(connectResponse))
                .then(response.send(connection.inbound().receive()))
                .then()
                .doOnTerminate(() -> connection.dispose())
        )
        .then();
}

但是,我在日志中得到了 Connection reset,而客户端得到了 SSL_ERROR_RX_RECORD_TOO_LONG

我做错了什么,如何实现?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。