Ssl 如何在使用ApacheHTTP组件4.x构建的代理中实现CONNECT方法

Ssl 如何在使用ApacheHTTP组件4.x构建的代理中实现CONNECT方法,ssl,proxy,apache-httpcomponents,Ssl,Proxy,Apache Httpcomponents,我正在使用ApacheHTTP组件4开发一个代理 当浏览器希望通过我的代理打开SSL连接时,它会使用HTTP CONNECT方法发送请求 如何使用HTTP组件实现CONNECT方法?如何将HTTP连接(已由HTTP组件库处理)转换为通过我的程序代理的原始TCP连接?一旦协商连接隧道(成功执行连接握手)并成功建立传出连接,代理应该绕过整个HTTP层,开始读取来自传入连接的原始套接字的任何内容,并将其复制到传出连接的原始套接字,以及读取来自传出连接套接字的任何内容,并将其复制到传入连接的套接字。那么

我正在使用ApacheHTTP组件4开发一个代理

当浏览器希望通过我的代理打开SSL连接时,它会使用HTTP CONNECT方法发送请求


如何使用HTTP组件实现CONNECT方法?如何将HTTP连接(已由HTTP组件库处理)转换为通过我的程序代理的原始TCP连接?

一旦协商连接隧道(成功执行连接握手)并成功建立传出连接,代理应该绕过整个HTTP层,开始读取来自传入连接的原始套接字的任何内容,并将其复制到传出连接的原始套接字,以及读取来自传出连接套接字的任何内容,并将其复制到传入连接的套接字。

那么如何从HTTP组件获取原始套接字呢?没有HTTP组件试图关闭它或从那时起对它做更多的事情。@Dr.Haribo:您使用的是阻塞或非阻塞(NIO)传输吗?在任何情况下,这两个模型在这里都有详细描述,我使用的是NIO传输。也许我可以使用ConnectionReactor启动到外部站点的新原始TCP连接?但是,我不清楚如何将现有的代理客户端连接转换为原始TCP套接字,或者如何以这种方式访问它。@Dr.Haribo:您需要的是掌握IOSession。默认情况下,它不是公开的连接实现,但您可以对它们进行子类化,并为IOSession提供getter。下面是一个反向代理的示例。如果您还有其他问题,您可能需要订阅HC-dev列表。