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.先在自己站点放一个文本文件注明程序版本号,当检查升级的时候,取文本内容与当前版本号比较,然后决定升级与否

http://blog.csdn.net/zang141588761/article/details/51934388

最新文章

  1. Dell R730 配置完RAID后装系统找不到硬盘。
  2. C++新特性(类)(转载)
  3. NoSql---MongoDB基本操作
  4. mysql实时同步到mssql的解决方案
  5. 关于java按位操作运算
  6. python 安装 easy_intall 和 pip python无root权限安装
  7. RR 和RC 幻读问题
  8. ods_yx给用户分配表空间、权限用户等工作内容。
  9. hashtable 和dictionary
  10. HD,3G视频数据中行号的插入方法---Verilog代码实现
  11. centos 7 安装elasticsearch
  12. Android定制:修改开机启动画面
  13. LomBok插件的使用
  14. weakSelf 和 strongSelf的区别和用处
  15. rabbitMQ windows 安装 入门
  16. rsync简介与rsync+inotify配置实时同步数据
  17. (转) Face-Resources
  18. Android 获取高度宽度为0的时候的处理
  19. Android面试题(2)
  20. 5 hbase-shell + hbase的java api

热门文章

  1. amazeui中内置的web组件有哪些且如何用
  2. 使用Delegate在两个ViewController之间传值
  3. 【codeforces 765D】Artsem and Saunders
  4. 使用jsp,tomcat实现用户登录注册留言的代码
  5. Android菜鸟的成长笔记(21)——跨进程调用Service
  6. [Android]使用化名(alias)功能防止相同资源的重复
  7. document.addEventListener的使用介绍
  8. 对Java字符串的探究
  9. yii2.0获取最后一条ID
  10. 44个 Javascript 变态题解析——分分钟让你怀疑人生