在 Indy 10 中,通过 TIdHTTP 的 IOHandler 把它连接到 SOCKS 代理。假设窗体已经拥有 Http、SocketHandler 和 Socks 组件:

Http.IOHandler := SocketHandler;
SocketHandler.TransparentProxy := Socks;
Socks.Host := 'proxy.example';
Socks.Port := 1080;
Socks.Version := svSocks5;

Page := Http.Get('http://example.com/');

这里的 SocketHandler 是 TIdIOHandlerStack,Socks 是 TIdSocksInfo。请在发出请求前配置这些组件。对于这个未配置代理凭据的公共站点示例,请从 SOCKS5 代理列表中挑选一个 SOCKS5 候选,并如下文所述清除任何过时的 HTTP 代理路由。选择 SOCKS 版本很重要,因为默认值是 svNoSocks。

TIdHTTP 的 ProxyParams 配置的是 HTTP 代理。仅走 SOCKS 的路由则应放在 TransparentProxy 上。若在那里同时保留 HTTP 代理,可能会描述 SOCKS 连接之外的另一个中间层,因此当旧 HTTP 代理配置不属于预期路径时应将其清除。

如需 SOCKS5 用户名/密码认证,请把 Socks.Authentication 设为 saUsernamePassword 并提供用户名和密码。具备 SSL 能力的 IOHandler 应保留其 TLS 职责;应把 SOCKS 挂到它继承的代理接口上,而不是换成一个普通处理器。

相关文章