我想制作一个重定向网站的应用程序。 它有一个包含“域”和“重定向域”的表。 与域匹配后,它会重定向到重定向域。 如果不匹配,则重定向到默认页面。 所以我用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 ++首选)?
谢谢
答案 0 :(得分:2)
从代理(或目标HTTP服务器)的角度来看,用户键入的URL与其他 URL之间存在无差异。每个HTTP请求都是自包含的,并且与每个其他HTTP请求无关。它们必须按要求按原样处理。
如果要忽略依赖URL(图像,脚本等),您必须提前知道初始 URL是什么,解析从该URL检索的数据,保持跟踪数据引用的任何URL,如果您稍后看到这些URL,则忽略这些URL。但是,HTTP协议中没有任何内容可以告诉您初始 URL是什么。有一个Referer
请求标头可能有时会有所帮助,因为它在浏览器请求依赖资源文件时填写,但当用户从一个页面导航到另一个页面时它也会填充,因此您可以& #39; t依靠Referer
。您必须实施自己的发现逻辑,以根据对给定客户端随时间推移请求的URL的更多分析来确定初始 URL。
只有客户真正知道它的请求和原因,代理只是一个到达它的网关。因此,您可以在代理中执行非常多的智能过滤,而无需了解客户端实际执行的操作。