如何解决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 举报,一经查实,本站将立刻删除。