使用IdHTTPProxyServer检测主URL

时间:2015-01-15 00:08:28

标签: delphi redirect proxy indy

我想制作一个重定向网站的应用程序。 它有一个包含“域”和“重定向域”的表。 与域匹配后,它会重定向到重定向域。 如果不匹配,则重定向到默认页面。 所以我用IdHTTPProxyServer创建了一个Delphi应用程序。 我已将其配置为使用“ssleay32.dll”和“libeay32.dll”与https一起使用。 一切都很好。 它使用“IdHTTPProxyServerHTTPBeforeCommand”事件来重定向,如下所示:

with AContext.Connection.IOHandler do
begin
  WriteLn('HTTP/1.0 302 Moved Temporarily');
  WriteLn('Location: ' + RedirectURL);
  WriteLn('Connection: close');
  WriteLn;
end;

但是如何通过主URL(在地址栏中输入的用户)和其他URL来区分事件调用? “IdHTTPProxyServerHTTPBeforeCommand”事件在为状态计数器加载页面时会调用很多次,Facebook就像按钮等。我不想将它们全部重定向到默认页面。

如果IdHTTPProxyServer无法做到这一点,Delphi中是否还有其他任何选项(可以生成本机可执行文件.C ++首选)?

谢谢

1 个答案:

答案 0 :(得分:2)

从代理(或目标HTTP服务器)的角度来看,用户键入的URL与其他 URL之间存在无差异。每个HTTP请求都是自包含的,并且与每个其他HTTP请求无关。它们必须按要求按原样处理。

如果要忽略依赖URL(图像,脚本等),您必须提前知道初始 URL是什么,解析从该URL检索的数据,保持跟踪数据引用的任何URL,如果您稍后看到这些URL,则忽略这些URL。但是,HTTP协议中没有任何内容可以告诉您初始 URL是什么。有一个Referer请求标头可能有时会有所帮助,因为它在浏览器请求依赖资源文件时填写,但当用户从一个页面导航到另一个页面时它也会填充,因此您可以& #39; t依靠Referer。您必须实施自己的发现逻辑,以根据对给定客户端随时间推移请求的URL的更多分析来确定初始 URL。

只有客户真正知道它的请求和原因,代理只是一个到达它的网关。因此,您可以在代理中执行非常多的智能过滤,而无需了解客户端实际执行的操作。