使用 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 有自己的代理组件,可以满足您的要求。查看TIdMappedPortTCP
和TIdHTTPProxyServer
组件作为起始位置。
TIdMappedPortTCP
是一个通用代理,它只是来回传递原始数据。您可以使用其OnConnect
事件为该连接动态配置目标主机/端口(例如通过从客户端读取它),或者您可以为所有连接静态设置其MappedHost
和MappedPort
属性。如果需要,您可以使用其OnExecute
和OnOutboundData
事件在数据通过代理时修改数据。
TIdHTTPProxyServer
是仅用于基于 HTTP 的代理的专用代理,其中客户端使用 HTTP GET
、POST
、HEAD
和 CONNECT
动词,指定目标主机/端口的绝对 URL ,然后根据需要来回传递 HTTP 标头和数据(CONNECT
通常用于通过防火墙代理 SSL/TLS 连接)。
【讨论】:
非常明智的建议,谢谢!这两个组件的来源都非常有用。如果有人有兴趣,最后我来了类似的东西:pastebin.com/ixt2gssD以上是关于使用 Indy 的代理服务器的主要内容,如果未能解决你的问题,请参考以下文章