zoukankan      html  css  js  c++  java
  • Delphi编程中Http协议应用

    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

  • 相关阅读:
    day 30 粘包 自定义报头
    day29 网络基础之网络协议和通信
    day28 面向对象的进阶 反射 和类的内置方法
    day 27 模块和包 面向对象的复习
    CGI,FastCGI,PHP-CGI和PHP-FPM的区别
    跨平台的移动应用开发引擎CrossApp简介
    element-ui组件中的select等的change事件中传递自定义参数
    关于setInterval和setTImeout中的this指向问题
    懒加载和预加载的区别
    vueX的五个核心属性
  • 原文地址:https://www.cnblogs.com/findumars/p/6711260.html
Copyright © 2011-2022 走看看