【问题标题】:Indy's TIdHTTPProxyServer: How to filter requests?Indy 的 TIdHTTPProxyServer:如何过滤请求?
【发布时间】:2011-01-12 08:48:20
【问题描述】:

我正在使用 TIdHTTPProxyServer 来实现一个简单的 HTTP 代理,但我现在想阻止一些与某些 URL 匹配的连接。哪个事件和/或组件最适合实现这一目标? Indy 文档并不太详细。 :(

谢谢!

【问题讨论】:

  • TIdHTTPProxyServer 根本无法做到这一点,必须编辑其代码
  • @Worm 是的,它可以,看我的回答...
  • @Worm 和@Dorin:当然有可能,看我的回答。 ;)
  • @jachguate 是否也可以更改响应?

标签: delphi indy10


【解决方案1】:

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

检查 Context 参数属性,你会发现很有用:

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

此时我从未尝试停止 PassTrough,但我敢打赌,如果您确定存在阻止规则匹配,则只需在此时引发异常即可。

【讨论】:

  • 您的回答让我意识到我一直在使用旧版本的 Indy。它已经改进了很多,至少我检查过的部分是这样。
【解决方案2】:

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

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

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

【讨论】:

  • -1: OnConnect 将在 HTTP 客户端 连接到您的代理时触发,而不是在代理连接到远程服务器时触发(这取决于您,TidHTTPProxy 没有实现它),并且仍然没有可用的 URL。除非您只检查允许哪些“内部”IP 向外部发送 HTTP 请求,否则这不是正确的方法。
  • @ldsandon: TIdHTTPProxyServer 确实为您实现了到远程服务器的连接(否则它不会是太多的代理)。请参阅TIdHTTPProxyServerContext.OutboundClient 属性。
  • @Remy Lebeau:你说得对,我对前段时间只使用 TidHTTPServer 的代理实现感到困惑。
猜你喜欢
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多