【发布时间】:2013-09-12 15:07:48
【问题描述】:
我在我的应用程序中经常使用TIdHTTP,我的用户请求具有特定超时的 Socks4/5 功能。我使用我的应用程序与 SSL 网站进行通信,之前我只使用常规的ProxyParams。
如何将 Socks4 和/或 Socks5 支持添加到具有特定超时的TIdHTTP 组件?
编辑:
由于我没有任何 Socks4/Socks5 代理,我创建了自己的一个新应用程序来测试。
我添加了TIdSocksServer 并为其分配了TIdServerIOHandlerSSLOpenSSL。
为了确保它可以连接,我向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 服务器即可正常工作。是不是我用错了?
【问题讨论】:
-
当透明代理组件没有分配
Owner时,IOHandler.TransparentProxy属性设置器具有特殊的逻辑来制作透明代理的新拥有副本,而不是使用您传入的原始副本。所以请注意为此。