一个有意思的问题---下载网络文件问题(30分)

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

luckson_li

Unregistered / Unconfirmed
GUEST, unregistred user!
用我自己写的程序
下载网络上文件"http://www2.79wx.com/2006-3/2/20063222242463641.gif"
总是下载为7178字节大小的文件,不正确.
而用"迅雷"下载时则能下载正确的文件145,900 字节.
这是为什么啊?
请各位高人给个源码XP D7
 
有人会吗?
555555555
 
我写了个线程,经测试可用.
unitdo
wnUnit;
interface
uses
Classes,SysUtils,IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
type
TDownThread = class(TThread)
private
{ Private declarations }
FURL:string;
protected
procedure Execute;
override;
public
constructor Create(url:string);
end;

implementation
{ TDownThread }
constructor TDownThread.Create(url: string);
begin
FURL:=url;
inherited Create(false);
end;

procedure TDownThread.Execute;
var ms:TMemoryStream;
Idh: TIdHTTP;
s,v:string;
ts:TStringList;
begin
{ Place thread code here }
FreeOnTerminate:=true;
ms:=TMemoryStream.Create;
idh:=TidHttp.Create(nil);
try
try
Idh.Get(FURL,ms);
except
exit;
end;

if ms.Size = 0 then
exit;
ms.Position := 0;
if pos('.gif',FURL)>0 then
begin
ms.SaveToFile('c:/test.gif');
exit;
end;
finally
idh.Free;
ms.Free;
end;
end;

end.
------------------------------------------
使用:
TDownThread.Create('http://www2.79wx.com/2006-3/2/20063222242463641.gif');
然后在C盘找找test.gif吧.
 
我测试过了,还是不行啊
你把"http://www2.79wx.com/2006-3/2/20063222242463641.gif"复制到IE地址栏..
看到的是"请到 WWW.79WX.COM 查看该图片".
与用"迅雷"下载图片对比一下,不一样哦
我不明白你为什么在上面的程序中要用线程?
下面代码与下载结果一样
var ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
Idh.Get(FURL,ms);
finally
ms.Free;
end;
end;
 
那可能是网站为防止盗链之类的所采取的措施吧.
用线程是因为手头正好有这么个单元,程序里用的,不妨碍主界面操作.
 
为什么"迅雷"可以下载呢?
它是怎么办到的啊?
我想当中的问题值得我们讨论研究
 
没意思,少了一个引用地址Referer,所以服务器判断你为非法下载,拒绝你,欺骗你!
这是网站防盗链功能中的一种。
 
请问一句,那怎么解决呢?
 
对不起,偶好像搞错了,偶有罪,不过
--------------------------------------------------------------------------------
你把"http://www2.79wx.com/2006-3/2/20063222242463641.gif"复制到IE地址栏..
看到的是"请到 WWW.79WX.COM 查看该图片".
--------------------------------------------------------------------------------
偶看到的是,“你赠我以啤酒,我赠你以可乐。。。”???
 
引用地址Referer
 
后退
顶部