Delphi使用进行post数据时超时设置
2015-12-30 18:48
543 查看
因项目需要进行http的post提交数据,开始时用indy的idHttp组件,但是测试时发现当网络中断(如拔掉网线),idHttp的超时设置无效果,要等20秒才提示超时(参考网上的做法,将indy9升级到indy10,且设置了idHttp的connetTimeout,ReadTimeout属性,均无效果)。
后来发现用ICS组件THttpCli可以很好的控制提交超时,达到我的目的。
ICS版本:OverbyteIcsV7Gold
下载:http://www.overbyte.be/arch/OverbyteIcsV7Gold.zip
Delphi7安装ICS
1、下载完成后解压到英文目录,建议解压缩到Delphi7安装目录,如:C:\Program Files\Borland\OverbyteIcsV7Gold
2、Tools——Environment Options——library,在library path里加入OverbyteIcsV7Gold->Delphi->Vc32目录。
3、从File->Open中打开OverbyteIcsV7Gold->Delphi->Vc32->OverbyteIcsD7Design.dpk文件,compile——install。
安装包和Demo下载:
http://download.csdn.net/detail/tc310/9384426
后来发现用ICS组件THttpCli可以很好的控制提交超时,达到我的目的。
ICS版本:OverbyteIcsV7Gold
下载:http://www.overbyte.be/arch/OverbyteIcsV7Gold.zip
Delphi7安装ICS
1、下载完成后解压到英文目录,建议解压缩到Delphi7安装目录,如:C:\Program Files\Borland\OverbyteIcsV7Gold
2、Tools——Environment Options——library,在library path里加入OverbyteIcsV7Gold->Delphi->Vc32目录。
3、从File->Open中打开OverbyteIcsV7Gold->Delphi->Vc32->OverbyteIcsD7Design.dpk文件,compile——install。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OverbyteIcsWndControl, OverbyteIcsHttpProt, StdCtrls; type TForm1 = class(TForm) HttpCli1: THttpCli; Button1: TButton; Memo1: TMemo; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure HttpCli1RequestDone(Sender: TObject; RqType: THttpRequest; ErrCode: Word); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Data : String; retStr: string; DataLen: Int64; FailMsg: string; begin Data := '{' + '"machineCode":"123",' + '"orgCode":"123",' + '"data": {' + '"cardNo": "12345678",' + '"cardType": "2"' + '}' + '}'; HttpCli1.SendStream := TMemoryStream.Create; HttpCli1.RcvdStream := TMemoryStream.Create; try HttpCli1.SendStream.Write(Data[1], Length(Data)); HttpCli1.SendStream.Seek(0, 0); HttpCli1.URL := Trim(Edit1.Text); HttpCli1.Timeout := 2;//V7.04 sync only! try HttpCli1.ContentTypePost := 'application/json;charset=utf-8'; HttpCli1.Post; DataLen := HttpCli1.RcvdStream.Size; SetLength(retStr,DateDelta); HttpCli1.RcvdStream.Position := 0; HttpCli1.RcvdStream.Read(PChar(retStr)^,DataLen); Memo1.Text := retStr; //ShowMessage(retStr); except on E: Exception do begin ShowMessage(e.Message); end; end; finally HttpCli1.RcvdStream.Free; HttpCli1.RcvdStream := nil; HttpCli1.SendStream.Free; HttpCli1.SendStream := nil; end; end; procedure TForm1.HttpCli1RequestDone(Sender: TObject; RqType: THttpRequest; ErrCode: Word); var Data : String; begin // HttpCli1.SendStream.Free; // HttpCli1.SendStream := nil; // //ShowMessage(IntToStr(ErrCode)); // if ErrCode <> 0 then //有异常 // begin // HttpCli1.RcvdStream.Free; // HttpCli1.RcvdStream := nil; // Exit; // end; // if HttpCli1.StatusCode <> 200 then //返回错误 // begin // HttpCli1.RcvdStream.Free; // HttpCli1.RcvdStream := nil; // Exit; // end; // HttpCli1.RcvdStream.Seek(0, 0); // SetLength(Data, HttpCli1.RcvdStream.Size); // HttpCli1.RcvdStream.Read(Data[1], Length(Data)); end; end.
安装包和Demo下载:
http://download.csdn.net/detail/tc310/9384426
相关文章推荐
- delphi中register, pascal, cdecl, stdcall, safecall
- delphi中INI 文件的创建与使用
- Delphi中Indy 10的安装和老版本的卸载
- Delphi调试DLL 不能调试 不能进入调试 注意!!!
- Delphi 的动态数组
- Delphi中的“委托”
- Delphi函数指针的两种定义(对象方法存在一个隐藏参数self,所以不能相互赋值)
- Delphi中的内存对齐 与 Packed关键字
- delphi 更改DBGrid 颜色技巧
- DELPHI的BPL使用
- delphi 统计运行时间
- delphi 使用TDatabase连接 sql server的方法
- delphi根据汉字生成拼音,全拼,或者带空格,或者不带空格
- Delphi:GLScene报错Need at least OpenGL version 1.1的解决方法
- Delphi 执行控制台(console)程序获取返回结果
- 关于Delphi错误:Cannot make a visible window modal
- delphi中exit,abort,break,continue 的区别
- Delphi IOS MusicPlayer 锁屏运行学习
- zw.delphi不同版本程序运行速度测试
- 升级旧Delphi应用转向支持手机的一个思路