博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi使用进行post数据时超时设置
阅读量:5237 次
发布时间:2019-06-14

本文共 3098 字,大约阅读时间需要 10 分钟。

因项目需要进行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;interfaceuses  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下载:

 

转载于:https://www.cnblogs.com/tc310/p/5089778.html

你可能感兴趣的文章
python库--pandas
查看>>
JS encodeURIComponent函数
查看>>
短信验证码接口(容联运通讯)
查看>>
Java中类体的构成
查看>>
HTML 和 CSS 画三角形和画多边行基本原理及实践
查看>>
带搜索的ComboBox
查看>>
WPF 插拔触摸设备触摸失效
查看>>
如何优雅的实现INotifyPropertyChanged接口
查看>>
.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证
查看>>
win10 uwp 使用 msbuild 命令行编译 UWP 程序
查看>>
解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
查看>>
Chapter 1 Securing Your Server and Network(2):管理服务的SIDs
查看>>
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
查看>>
[Head First设计模式]一个人的平安夜——单例模式
查看>>
SQL Server 大数据搬迁之文件组备份还原实战
查看>>
HTML5实现图片文件异步上传
查看>>
Eclipse 4.2 汉化
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
网络时间获取
查看>>
多线程实现资源共享的问题学习与总结
查看>>