您的位置:首页 > 理论基础 > 计算机网络

Delphi编程中Http协议应用

2016-07-17 21:04 274 查看
Http协议的通信遵循一定的约定.例如,请求一个文件的时候先发送Get请求,然后服务器会返回请求的数据.如果需要进行断点传输,那么先发送'HEAD
/'请求,其中返回的'Content-Length: '就是文件实际大小.将其和我们本地需要断点下载的文件大小比较,发送GET请求和发送需要下载的文件开始位置'RANGE:
bytes='+inttostr(iFilePos)+'-'+#13#10;服务器如果支持断点下载的话就会接着发送余下的数据了.因为这方面的文章比较多,我在这里就不详细讲述了.感兴趣的朋友可以自行查阅相关资料或者RFC文档。

  新建一个工程,放上一个TIdHTTP控件,一个TIdAntiFreeze控件,一个TProgressBar用于显示下载进度。最后放上一个TButton用于开始执行我们的命令。代码如下:

procedure TForm1.Button2Click(Sender: TObject);

 var

   MyStream:TMemoryStream;

 begin

   IdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.

   MyStream:=TMemoryStream.Create;

   try
 
   
//下载我站点的一个ZIP文件

     IdHTTP1.Get('http://www.138soft.com/download/Mp3ToExe.zip',MyStream); 

   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);

 begin

   ProgressBar1.Max:=AWorkCountMax;

   ProgressBar1.Min:=0;

   ProgressBar1.Position:=0;

 end;
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;

  const AWorkCount: Integer);
begin

    ProgressBar1.Position:=AWorkCount;
end;
IdHTTP1的Get还有一种形式就是获取字符串:例如,上面的程序可以改写成:
procedure TForm1.Button1Click(Sender: TObject);

 var

   MyStr:String;

 begin

   IdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.

   try

     MyStr:=IdHTTP1.Get('http://www.138soft.com/default.htm');

   except

     Showmessage('网络出错!');

     Exit;

   end;

   Showmessage(MyStr);

 end;

  应用:现在很多程序都有自动升级功能,实际上就是应用了GET.先在自己站点放一个文本文件注明程序版本号,当检查升级的时候,取文本内容与当前版本号比较,然后决定升级与否
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: