使用 Indy 的代理服务器

Posted

技术标签:

【中文标题】使用 Indy 的代理服务器【英文标题】:Proxy server using Indy 【发布时间】:2011-05-07 09:06:00 【问题描述】:

我是 Indy 的新手,我想用它构建一个简单的代理服务器。这是一个相当大的图书馆,我只是不知道从哪里开始。当客户端连接到服务器时,OnExucute 启动并接收客户端连接作为参数(AContext.Connection)。

我想做以下事情:

[client connection] := AContext.Connection
read host/port from [client connection]
[remote connection] := connect to host/port
while both connections alive:
  if data available in [client connection]:
    read data from [client connection]
    write data to [remote connection]
  if data available in [remote connection]:
    read data from [remote connection]
    write data to [client connection]

问题是我应该使用哪些功能? Connection 对象中有 IOHandler 属性,其中包含大量属性。请帮忙。

我正在使用 Delphi2010 附带的 Indy。

【问题讨论】:

【参考方案1】:

Indy 有自己的代理组件,可以满足您的要求。查看TIdMappedPortTCPTIdHTTPProxyServer 组件作为起始位置。

TIdMappedPortTCP 是一个通用代理,它只是来回传递原始数据。您可以使用其OnConnect 事件为该连接动态配置目标主机/端口(例如通过从客户端读取它),或者您可以为所有连接静态设置其MappedHostMappedPort 属性。如果需要,您可以使用其OnExecuteOnOutboundData 事件在数据通过代理时修改数据。

TIdHTTPProxyServer 是仅用于基于 HTTP 的代理的专用代理,其中客户端使用 HTTP GETPOSTHEADCONNECT 动词,指定目标主机/端口的绝对 URL ,然后根据需要来回传递 HTTP 标头和数据(CONNECT 通常用于通过防火墙代理 SSL/TLS 连接)。

【讨论】:

非常明智的建议,谢谢!这两个组件的来源都非常有用。如果有人有兴趣,最后我来了类似的东西:pastebin.com/ixt2gssD

以上是关于使用 Indy 的代理服务器的主要内容,如果未能解决你的问题,请参考以下文章

检测 IE 代理设置并与 TIdHTTP 一起使用

为啥这个检查代理有效性的代码会崩溃?

如何使用代理上网?

如何使用代理服务器上网

使用代理服务器上网的方法

如何设置代理服务器使用的JVM