Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490504
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:49:43

下载本文示例代码
  Http协议的通信遵循一定的约定.例如,请求一个文件的时候先发送Get请求,然后服务器会返回请求的数据.如果需要进行断点传输,那么先发送'HEAD /'请求,其中返回的'Content-Length: '就是文件实际大小.将其和我们本地需要断点下载的文件大小比较,发送GET请求和发送需要下载的文件开始位置'RANGE: bytes=' inttostr(iFilePos) '-' #13#10;服务器如果支持断点下载的话就会接着发送余下的数据了.因为这方面的文章比较多,我在这里就不详细讲述了.感兴趣的朋友可以自行查阅相关资料或者RFC文档。  当然,如果你是个懒人,也可以直接采用Delphi自带的控件.以Delphi6的INDY组件为例.新建一个工程,放上一个TIdHTTP控件,一个TIdAntiFreeze控件,一个TProgressBar用于显示下载进度.最后放上一个TButton用于开始执行我们的命令.代码如下: procedure TForm1.Button1Click(Sender: TObject);//点击按钮的时候开始下载我们的文件varMyStream:TMemoryStream;beginIdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.MyStream:=TMemoryStream.Create;tryIdHTTP1.Get('',MyStream);//下载我站点的一个ZIP文件except//INDY控件一般要使用这种try..except结构.Showmessage('网络出错!');MyStream.Free;Exit;end;MyStream.SaveToFile('c:\Mp3ToExe.zip');MyStream.Free;Showmessage('OK');end;procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;const AWorkCountMax: Integer);//开始下载前,将ProgressBar1的最大值设置为需要接收的数据大小.beginProgressBar1.Max:=AWorkCountMax;ProgressBar1.Min:=0;ProgressBar1.Position:=0;end;procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;const AWorkCount: Integer);//接收数据的时候,进度将在ProgressBar1显示出来.beginProgressBar1.Position:=ProgressBar1.Position AWorkCount;end;  IdHTTP1的Get还有一种形式就是获取字符串:例如,上面的程序可以改写成: procedure TForm1.Button1Click(Sender: TObject);varMyStr:String;beginIdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.tryMyStr:=IdHTTP1.Get('');exceptShowmessage('网络出错!');Exit;end;Showmessage(MyStr);end;  应用:现在很多程序都有自动升级功能,实际上就是应用了GET.先在自己站点放一个文本文件注明程序版本号,当检查升级的时候,取文本内容与当前版本号比较,然后决定升级与否.共3页。 1 2 3 :   Http协议的通信遵循一定的约定.例如,请求一个文件的时候先发送Get请求,然后服务器会返回请求的数据.如果需要进行断点传输,那么先发送'HEAD /'请求,其中返回的'Content-Length: '就是文件实际大小.将其和我们本地需要断点下载的文件大小比较,发送GET请求和发送需要下载的文件开始位置'RANGE: bytes=' inttostr(iFilePos) '-' #13#10;服务器如果支持断点下载的话就会接着发送余下的数据了.因为这方面的文章比较多,我在这里就不详细讲述了.感兴趣的朋友可以自行查阅相关资料或者RFC文档。  当然,如果你是个懒人,也可以直接采用Delphi自带的控件.以Delphi6的INDY组件为例.新建一个工程,放上一个TIdHTTP控件,一个TIdAntiFreeze控件,一个TProgressBar用于显示下载进度.最后放上一个TButton用于开始执行我们的命令.代码如下: procedure TForm1.Button1Click(Sender: TObject);//点击按钮的时候开始下载我们的文件varMyStream:TMemoryStream;beginIdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.MyStream:=TMemoryStream.Create;tryIdHTTP1.Get('',MyStream);//下载我站点的一个ZIP文件except//INDY控件一般要使用这种try..except结构.Showmessage('网络出错!');MyStream.Free;Exit;end;MyStream.SaveToFile('c:\Mp3ToExe.zip');MyStream.Free;Showmessage('OK');end;procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;const AWorkCountMax: Integer);//开始下载前,将ProgressBar1的最大值设置为需要接收的数据大小.beginProgressBar1.Max:=AWorkCountMax;ProgressBar1.Min:=0;ProgressBar1.Position:=0;end;procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;const AWorkCount: Integer);//接收数据的时候,进度将在ProgressBar1显示出来.beginProgressBar1.Position:=ProgressBar1.Position AWorkCount;end;  IdHTTP1的Get还有一种形式就是获取字符串:例如,上面的程序可以改写成: procedure TForm1.Button1Click(Sender: TObject);varMyStr:String;beginIdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.tryMyStr:=IdHTTP1.Get('');exceptShowmessage('网络出错!');Exit;end;Showmessage(MyStr);end;  应用:现在很多程序都有自动升级功能,实际上就是应用了GET.先在自己站点放一个文本文件注明程序版本号,当检查升级的时候,取文本内容与当前版本号比较,然后决定升级与否.共3页。 1 2 3 : 下载本文示例代码


Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)Delphi编程中Http协议应用(一)
阅读(385) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~