IdHTTP转向后的地址问题~~在线等!(50分)

  • 主题发起人 主题发起人 七步子
  • 开始时间 开始时间

七步子

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的,比如说我用http://tvbook.yeah.net打开一个网址,但是http://tvbook.yeah.net它只是一个域名,我想得到http://tvbook.yeah.net它转向后的地址,怎么获得? 因为我是用IdHTTP下载一个文件,但是我用的是IdHTTP1.Get(‘http://tvbook.yeah.net’)来下载文件的,是163的一域名,它转向的是‘http://api8.8u8.com/aa.rar’这样后果是结果下的文件不是AA。RAR文件,而一个http://tvbook.yeah.net上面的网页!但是我是想下载http://api8.8u8.com/aa.rar哪个aa.rar文件的,我不想用IdHTTP1.Get(http://api8.8u8.com/aa.rar)的方法,这样是行的,我想用IdHTTP1.Get(域名),请问有方法吗??
 
没有人会吗??
 
你在ie地址栏输入tvbook.yeah.net,能自动开始下载aa.rar吗,如果能,那么idhttp也能
 
在ie地址栏可以呀~~
 
对于这个情况,IE能,但IDHTTP确不能。这是有原因的:
1.IDHTTP只支持SERVER端直接控制的转向。就是说他只支持SERVER说的:“转向!!!”
2。而 TVBOOK.YEAH.NET的转向是由SERVER返回的网页中的脚本控制的,脚本是由IE分析并
执行的,也就是说IE分析了网页中的脚本并执行了,然后转向了另外的URL,
3。所以说IE能转,IDHTTP不能就是因为他没有脚本分析和执行功能。

看看TVBOOK.YEAH.NET的运行过程吧:
--------连接请求数据包-------------
GET / HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: tvbook.yeah.net


------服务端返回数据包----------
HTTP/1.1 200 OK
Date: Sat, 01 May 2004 22:39:11 GMT
Server: Apache/1.3.28 (Unix) mod_virtual/0.97.1
Connection: close
Content-Type: text/html

[blue]<HTML>
[red]<meta http-equiv="refresh" content="3;url=http://api8.8u8.com/e800.rar">[/red]<body><script> window.open('http://popme.163.com/netease/pop_domain.html','my','width=400,height=300'); </script></html>[/blue]

省略。。。

--------连接请求数据包-------------
GET /e800.rar HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-cn
Pragma: no-cache
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)
Host: api8.8u8.com


------服务端返回数据包----------
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Cache-Control: max-age=180
Expires: Sat, 01 May 2004 22:44:25 GMT
Date: Sat, 01 May 2004 22:41:25 GMT
Content-Type: application/octet-stream
Accept-Ranges: bytes
Last-Modified: Fri, 30 Apr 2004 11:33:14 GMT
ETag: "62caaaeca62ec41:15bf"
Content-Length: 249856


等待IE确定保存路径后,IE就开始接受文件的内容了

4。所以你必须更据返回网页中的[red]<meta http-equiv="refresh" content="3;url=http://api8.8u8.com/e800.rar">[/red]来重新GET 这个URL。
 
可否给出相应的代码来看看??
 
没什么代码,这个是我做的HTTP代理服务器监控得到的数据
也就是说如果你想得到真正的文件下载URL,你需要2次GET
第1次GET 得到:
[blue]<HTML>
[red]<meta http-equiv="refresh" content="3;url=http://api8.8u8.com/e800.rar">[/red]<body><script> window.open('http://popme.163.com/netease/pop_domain.html','my','width=400,height=300'); </script></html>[/blue]

然后你需要从返回的这些内容中找到 http://api8.8u8.com/e800.rar
(可以考虑用pos('url=',retunstring),然后取得后面的内容)
最后开始idHttp.get('http://api8.8u8.com/e800.rar');
 
后退
顶部