Delphi SSL与Socks

Delphi SSL与Socks,delphi,indy,indy10,Delphi,Indy,Indy10,我在我的应用程序中使用了大量的TIdHTTP,我的用户请求了一个具有特定超时的Socks4/5功能。我使用我的应用程序与SSL网站通信,以前我只使用常规的ProxyParams。 如何将Socks4和/或Socks5支持添加到具有特定超时的TIdHTTP组件 编辑: 因为我没有任何Socks4/Socks5代理,所以我创建了一个新的应用程序来测试。 我添加了tidsockserver,并为其分配了tidserveriohandlerslopenssl。 为了确保it连接,我在OnConnect中

我在我的应用程序中使用了大量的
TIdHTTP
,我的用户请求了一个具有特定超时的Socks4/5功能。我使用我的应用程序与SSL网站通信,以前我只使用常规的
ProxyParams
。 如何将Socks4和/或Socks5支持添加到具有特定超时的
TIdHTTP
组件

编辑:

因为我没有任何Socks4/Socks5代理,所以我创建了一个新的应用程序来测试。 我添加了
tidsockserver
,并为其分配了
tidserveriohandlerslopenssl
。 为了确保it连接,我在
OnConnect
中添加了一个消息框。服务器侦听端口8080,并设置为
Active:=True

下面是我使用
TIdHTTP
组件的代码:

procedure NewQuery;
var
 IDHTTP                                : TIdHTTP;
 SSL                                   : TIdSSLIOHandlerSocketOpenSSL;
 Socks                                 : TIdSocksInfo;
begin
 Socks                                 := TidSocksInfo.Create (NIL);
 IDHTTP                                := TIdHTTP.Create(NIL);
 SSL                                   := TIdSSLIOHandlerSocketOpenSSL.Create(NIL);
 IDHTTP.IOHandler                      := SSL;
 SSL.TransparentProxy                  := Socks;
 Socks.Host                            := 'localhost';
 Socks.Port                            := 8080;
 Socks.Authentication                  := saNoAuthentication;
 Socks.Version                         := svSocks4; // or svSocks5
 IDHTTP.ConnectTimeout                 := 5000; // 5 seconds
 IDHTTP.Get ('www.google.com');
end;

不确定我是否使用了正确的方法,但GET请求似乎在没有连接到socks服务器的情况下工作。我用错了吗?

TIdSocksInfo
组件分配给IOHandler的
TransparentProxy
属性。

谢谢。我不知道TransparentProxy属性。我编辑了我的问题,似乎遗漏了什么。很抱歉(再次)打扰您,但您是否介意再次查看并提供更详细的答案?不要将SSL添加到您的SOCKS服务器。客户端将首先建立到代理的连接,让代理建立到目标服务器的连接,然后客户端将直接与目标服务器协商SSL会话,而不是与代理协商。我理解。那么我的代码是对的?看起来它根本没有做任何事情,因为即使我将socks主机和端口设置为非侦听地址,它仍然会建立到Web服务器的连接,就像根本没有socks信息一样。更改代码,使
TIdSocksInfo
拥有者为非nil
Owner
。否则,
IOHandler
将创建
TIdSocksInfo
的内部副本,但主机/端口不会转入副本。我建议将
TIdHTTP
设置为
IOHandler
TIdSocksInfo
所有者,
IOHandler.TransparentProxy
属性设置程序具有特殊的逻辑,可以创建TransparentProxy的新拥有副本,而不是使用传入的原始副本。所以要小心。