Delphi 印第';TIdHTTPProxyServer:如何筛选请求?

Delphi 印第';TIdHTTPProxyServer:如何筛选请求?,delphi,indy10,Delphi,Indy10,我正在使用一个TIdHTTPProxyServer来实现一个简单的HTTP代理,但我现在想阻止一些连接,如果它们与某些URL匹配。哪个事件和/或组件最适合实现这一点?印地的文件不太明确:( 谢谢!组件有一个“OnConnect”事件,双击它并添加以下代码: if AContext.Connection.Socket.Binding.PeerIP = '127.0.0.1' then AContext.Connection.Disconnect; 将127.0.0.1替换为您的筛选器,这只是

我正在使用一个TIdHTTPProxyServer来实现一个简单的HTTP代理,但我现在想阻止一些连接,如果它们与某些URL匹配。哪个事件和/或组件最适合实现这一点?印地的文件不太明确:(

谢谢!

组件有一个“OnConnect”事件,双击它并添加以下代码:

if AContext.Connection.Socket.Binding.PeerIP = '127.0.0.1' then
  AContext.Connection.Disconnect;

将127.0.0.1替换为您的筛选器,这只是一个“非常基本的示例”,同样适用于具有“OnConnect”事件的其他Indy服务器。

作为基本筛选器,您可以使用OnHTTPBeforeCommand事件处理程序(在将命令发送到HTTP服务器之前触发)

检查上下文参数属性,您会发现以下内容很有用:

Context.Command
Context.OutboundClient.Host
Context.OutboundClient.Port
Context.Document
Context.Headers

此时我从未尝试停止passTour,但我敢打赌,如果您确定存在块规则匹配,您只需在该点引发一个异常即可完成此操作。

TIdHTTPProxyServer无法完成此操作,必须编辑其code@Worm“是的,它可以,看我的答案……”沃姆和多林:当然可能,看我的答案@JachGrate是否也可以更改响应?-1:OnConnect将在HTTP客户端连接到您的代理时触发,而不是在代理连接到远程服务器时触发(这取决于您,TidHTTPProxy不实现它),并且没有URL仍然可用。除非您只检查允许哪些“内部”IP向外部发送HTTP请求,否则这不是正确的方法。@ldsandon:
TIdHTTPProxyServer
确实为您实现了到远程服务器的连接(否则,它将不太像代理)。请参阅
TIdHTTPProxyServerContext.OutboundClient
属性。@Remy Lebeau:没错,我对前一段时间只使用TidHTTPServer的代理实现感到困惑。你的回答让我意识到我使用的是旧版本的Indy。它改进了很多,至少是我检查过的部分。