您的位置:首页 > 编程语言 > Delphi

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。

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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: