IIS过滤器,怎么能捕获到请求的URL并修改后转向??? ( 积分: 200 )

  • 主题发起人 主题发起人 ymkj
  • 开始时间 开始时间
Y

ymkj

Unregistered / Unconfirmed
GUEST, unregistred user!
IIS过滤器,怎么能捕获到请求的URL并修改后转向??

ISAPI的网站,URL地址为:
“http://www.xxxxxx.com/disapi.dll/blist?aa=123&bb=456”
我想做个IIS过滤器,获得这个地址串,进行一些访问权限的操作,
我从网上找到一些资料,用GetFilterVersion和HttpFilterProc写了
一个过滤器,可是取不到全部地址串,只能取到“www.xxxxxx.com”
如何才能取到全部地址串,并在处理后再分别转向到不同的网址??
 
//------------向对方发回信息 两种方案(1 发送 HTML内容给对方,2 打开服务器已有文件内容给对方)---------------------
if URL_TempFile='' then
BEGIN
sMsg:='<head><title>IISColander(' + IISColanderSession.SessionWebUrl + ')为本站提供 防盗链 保护</title></head><body><h1>文件跳转</h1>';
sMsg:=sMsg+'IISColander(' + IISColanderSession.SessionWebUrl + ')为本站提供 防盗链 保护 <a HREF=http://';
sMsg:=sMsg+ sWebSite +'/ErrorFile/' + IISColanderSession.SessionErrorFile_GetUrl +'?URL=&quot;'+ sURL + sQUERY_STRING +'&quot;>跳转</a></body>';
sMsgLen:=length(sMsg);
Try
sHead:= 'Location: http://'+ sWebSite + '/ErrorFile/' + IISColanderSession.SessionErrorFile_GetUrl+'?URL=&quot;' + sURL + sQUERY_STRING+'&quot;' + #13#10;
pfc.AddResponseHeaders(pfc,pchar(sHead),0);
sHead:= '302 IISColander(' + IISColanderSession.SessionWebUrl + ')为本站提供防盗链保据';
pfc.ServerSupportFunction(pfc, SF_REQ_SEND_RESPONSE_HEADER, PChar(sHead), 0, 0);
pfc.WriteClient(pfc, PChar(sMsg), sMsgLen, 0);
Except
IISColanderSession.WriteLog('Error: 防盗链回信息于对方操作失败'); //日志记录点
End;
Result:=SF_STATUS_REQ_FINISHED;
End
Else
Begin
Try
IISColanderSession.PRO_DEBUG('URL_TempFile:='+URL_TempFile); //这里是调试点
URL_MAP:=HTTP_FILTER_URL_MAP(pvNotification^);
StrLCopy(URL_MAP.pszPhysicalPath,pchar(URL_TempFile),length(URL_TempFile));
Except
IISColanderSession.WriteLog('Error: 防盗链绝对地址操作失败'); //日志记录点
END;
End;
 
{***************************** 进行头文件提取值 *************************************}
function _GetServerVariable(var pfc: THTTP_FILTER_CONTEXT; const Name: string): string;
var
Buffer: array[0..1024] of Char;
Size: DWORD;
begin
Size := SizeOf(Buffer);
if pfc.GetServerVariable(pfc, PChar(Name), @Buffer, Size) then
begin
if Size > 0 then Dec(Size);
SetString(Result, Buffer, Size);
end
else Result := '';
end;

使用方法
var
pfc: THTTP_FILTER_CONTEXT;
GetServerVariable(pfc, 'URL')
 
to: flfqnet
第一种方法不可以实现 ,我看一下第二种方法,实际上我要做的就是一个基于IIS的ISAPI过滤器,在IIS程序器端程序之前获得请求的网址全串,处理后再送回,由服务器端按新的网址全串来处理
 
上面是个思路,不是让你照抄

以上方法在 WINDOWS 2000 XP 2003中均可实现
 
哎。。。
我不是照抄,只是找不到客户端请求的网址全串,或是说不知道那个东西
可以取到请求的网址全串,我现在用的是2003的IIS6,好多原来在IIS5下
能实现的都不能实现了,而我看MSDN又看不懂,只好问一下了,搞了十多
天了,不搞 了,多谢你的回复,一点点分数,不成敬意,ymkj#eyou.com
有时间mail里聊聊
 
后退
顶部