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
拥有者为非nilOwner
。否则,IOHandler
将创建TIdSocksInfo
的内部副本,但主机/端口不会转入副本。我建议将TIdHTTP
设置为IOHandler
和TIdSocksInfo
的所有者,IOHandler.TransparentProxy
属性设置程序具有特殊的逻辑,可以创建TransparentProxy的新拥有副本,而不是使用传入的原始副本。所以要小心。