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

时间: 2024-10-12 13:14:59

Delphi编程中Http协议应用的相关文章

Delphi编程中软件调用EXE文件与DLL文件的体会

一.定义 EXE文件,是完整的"Windows窗体应用程序"或"控制台应用程序",它能独立执行,也能被居主EXE调用.其内部是系列类或方法构成,执行时,全部载入内存. DLL文件,全称是Dynamic Link Libaray,即动态链接库,将程序(EXE)运行所需要的类或方法的实现放在dll文件中,它的类.方法不能直接被执行,必须由一个EXE文件调用载入内存,通过类.方法形式从内存中获取(执行). 二.相同 1.二者内部结构基本一致,都是由操作系统的类.特定语言(

游戏编程系列[1]--游戏编程中RPC协议的使用

RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易.RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器. 首先,客户机调用进程发送一个有进程参数的调用信息到服务进

Swift中面向协议的编程

什么是面向协议的编程? 面向协议的编程,是一种编程范式. 编程范式,是一个计算机科学用语.维基百科中的解释是,计算机编程的基本风格或典型模式.通俗来说,就是解决某一个问题的方法不同方法和思路. 像大家很熟悉的,面向对象编程以及面向过程编程,都是一种编程范式. 面向过程编程,关心的焦点是解决某一个问题需要多少步.而面向对象的编程关心的是解决问题需要多少个对象,以及这些对象之间的组织联系. 解释完了编程范式这个名字含义之后,我们继续回到正题上来. 既然面向协议编程,与面向对象,面向过程一样,是一种编

关于delphi XE7中的动态数组和并行编程(第一部分)

本文引自:http://www.danieleteti.it/category/embarcadero/delphi-xe7-embarcadero/ 并行编程库是delphi XE7中引进的最受期待的功能之一.下面是一个简单的并行编程例子:   procedure TFormThreading.Button1Click(Sender: TObject); var   tasks: array of ITask;   value: Integer; begin   value := 0;   t

Java通信编程中调用UDP协议与TCP协议之间的不同

UDP协议与TCP协议之间的区别不再分析,主要是分析一下这两个协议在Java通信编程中是如何被使用的. 首先介绍TCP,对于TCP,Java语言为它提供了良好的支持.建立TCP通信,首先需要构建服务器,并且得 到服务器的IP和端口号. TCP协议下的Socket类: java.net.Socket类代表客户端连接 java.net.ServerSocket类代表服务器端连接 Server:ServerSocket ss = new ServerSocket(5000); //创建服务器端的soc

Delphi编程OOP思想【转】

原文:http://blog.sina.com.cn/s/blog_9c47a15201015rew.html 注:本文摘自http://blog.csdn.net/haiou327/article/details/5937171,转载请注明: 好东西大家分享 刚刚接触的Delphi的朋友,可能最感兴趣的就是它丰富.强大的VCL(可视化构件库).仅仅向窗体上扔几个构件,甚至不用动手写代码,就能很容易地做出一个有实用价值的程序,真是令人激动.但是,VCL只是Delphi的一小部分,Delphi的优

网络编程中的关键问题总结

总结下网络编程中关键的细节问题,包含连接建立.连接断开.消息到达.发送消息等等: 连接建立 包括服务端接受 (accept) 新连接和客户端成功发起 (connect) 连接. accept接受连接的问题在本文最后会聊到,这里谈谈connect的关键点:     使用非阻塞连接建立需要注意:     connect/select返回后,可能没有连接上:需要再次确认是否成功连接: 步骤为: 使用异步connect直接连接一次,因为使用了非阻塞,函数立刻返回: 检查返回值,为0成功连接,否则加入到s

浅谈TCP/IP网络编程中socket的行为

我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: . TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) . Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为. . 编写Performant, Scalable的服务器程序.包括多线程.IO Multiplexing.非阻塞.异步等各种技术. 关于TCP/IP协议,建议参考Richard Stevens的<TCP/IP Illust

TMsgThread, TCommThread -- 在delphi线程中实现消息循环(105篇博客,好多研究消息的文章)

在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供. 花了两天的事件研究了一下win32的消息系统,写了一个线程内消息循环的测试. 但是没有具体应用过,贴出来给有这方面需求的DFW参考一下.希望大家和我讨论. {----------------------------------------------------------------------------- Unit