关于HTTP协议,防盗链下载问题~~(100分)

  • 主题发起人 主题发起人 ljdzxx
  • 开始时间 开始时间
L

ljdzxx

Unregistered / Unconfirmed
GUEST, unregistred user!
我用IE直接访问资源http://wow.girlstar.cn/res.php?id=11
时,可监控(用监控工具HttpDetect,可到http://www.effetech.com
下载)到HTTP请求头为如下:
==============================================================
GET /res.php?id=11 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: wow.girlstar.cn
Connection: Keep-Alive
Cookie: disad=1; AJSTAT_ok_times=2

注意上面带了Cookie信息,现在我改用IdHttp下载,代码如下:

FileStream1:= TFileStream.Create('C:/abc.rar',fmCreate);
try
IdHTTP1.Get('http://wow.girlstar.cn/res.php?id=11',FileStream1);
finally
FileStream1.Free;
end;

监控到的Http请求头为如下:
===========================================================================
GET /res.php?id=11 HTTP/1.1
Content-Type: text/html
Host: wow.girlstar.cn
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)

为何却没有出现Cookie信息啊?IdHttp我绑定了IdCookieManager的,谁知道怎么像IE一样在发送Http请求的时候就自动把Cookies带进去么?别告诉我说反正资源可以下载就不用理会那个!我现在做的一个防防盗链程序就是需要实现这个.
 
Cookie: disad=1; AJSTAT_ok_times=2
不是第一个get就得到的 你可以清空cookies再监视第一个get就明白

至于带进去

你试试get这个有COOKIES的地址就明白:


procedure TForm1.Button1Click(Sender: TObject);
var
tmpStr:TStringList;
begin
try
begin
tmpStr:=TStringlist.Create ;
tmpStr.Add(IdHTTP1.Get('http://member1.taobao.com/member/login.jhtml?f=top&redirect_url=http%3A%2F%2Fwww.taobao.com%2F'));
Memo1.Text:=tmpStr.Text;
end
except
{...}
end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin


for i := 0 to IdCookieManager1.CookieCollection.Count - 1 do
begin
memo2.Lines.Add(IdCookieManager1.CookieCollection.Items.CookieText);
end;
end;
 
Cookie: disad=1; AJSTAT_ok_times=2这两个不是一般的Cookie啊,我用IdCookieManager怎么都收集不到,这两个值是怎么来的?IE是怎么得到的?怎么会出现在第一次访问的HTTP头信息里?麻烦熟悉HTTP协议的朋友进来帮忙解答一下.
 
我已经知道怎么把Cookie带进去了,在IdHttp发出请求前作如下定义即可:
head:=TIdHeaderList.Create;
head.Text:='Cookie: disad=1; AJSTAT_ok_times=2';
IdHTTP1.Request.CustomHeaders:=head;
现在关键问题是,我怎么知道这页面的Cookie信息是disad=1; AJSTAT_ok_times=2啊?
 
Wed Aug 02 10:21:22 2006 正在连接 wow.girlstar.cn:80
Wed Aug 02 10:21:22 2006 正在连接 wow.girlstar.cn [IP=218.66.103.251:80]
Wed Aug 02 10:21:22 2006 已连接.
Wed Aug 02 10:21:22 2006 GET /res.php?id=11 HTTP/1.1
Wed Aug 02 10:21:22 2006 Host: wow.girlstar.cn
Wed Aug 02 10:21:22 2006 Accept: */*
Wed Aug 02 10:21:22 2006 Referer: http://wow.girlstar.cn
Wed Aug 02 10:21:22 2006 Cookie: disad=1; AJSTAT_ok_times=6; AJSTAT_ok_pages=1; kcc_girlstarcn_582=yes
Wed Aug 02 10:21:22 2006 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Wed Aug 02 10:21:22 2006 Pragma: no-cache
Wed Aug 02 10:21:22 2006 Cache-Control: no-cache
Wed Aug 02 10:21:22 2006 Connection: close

上面是用FlashGet新建下载http://wow.girlstar.cn/res.php?id=11
这个文件时所显示的请求信息,它是怎么获得这些Cookie信息的?通过在上面三行所显示的TCP连接然后就分析到了Cookie了?还是???小弟实在不解
 
我已经解决了,原来是获取本地Cookie
function TForm1.GetCookiesByUrl(url: string): string ;
var
CookieData:string;
CookieSize:Cardinal;
begin
Result:='';
try
CookieSize:=1024;
Setlength(CookieData,CookieSize);
if InternetGetCookie(PAnsiChar(url),nil,PAnsiChar(CookieData),CookieSize) then
Result:=CookieData;
except
{}
end;
end;
 
我已经解决了,原来是获取本地Cookie

可以散分了吧
 
多人接受答案了。
 
后退
顶部