因项目需要进行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 

Delphi使用进行post数据时超时设置的更多相关文章

  1. SQL 数据库连续插入大批量数据时超时

    经常会处理大批量千万级的数据,一直以来都没问题.最近在处理时确出来了经常超时,程序跑一段时间就得停下来重启服务器,根据几次的调整发现了问题的所在,产生这类问题主要是以下几点所导致:      1.数据 ...

  2. 使用iVMS-4200 存储录像数据时的设置

    1.安装软件时,选择:存储服务器 2.对存储服务器进行配置,具体配置见 配置手册.

  3. libcurl使用easy模式阻塞卡死等问题的完美解决---超时设置

    libcurl使用时疑难问题: 在使用libcurl时, jwisp发现, curl_easy_perform是阻塞的方式进行下载的, curl_easy_perform执行后,程序会在这里阻塞等待下 ...

  4. mysql/mariadb数据库在插入表数据时,ID竟然成奇数增加了?看完下面内容就知道怎么处理了。

    今天突然被问到一个问题,mysql数据库插入表数据时,设置了ID自增,但是插入数据后,ID却呈奇数增加,不是123456类型,而是13579形式,突然有点懵,研究了一会,发现是auto_increme ...

  5. delphi tidhttp 超时设置无效的解决方法

    现在delphi都发布到xe8了,tidhttp还有缺陷,那就是超时设置在没有网络或者连不上服务器的时候是无效的,不管你设置为多少都要10-20秒.connectTimeout和readTimeout ...

  6. 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时

    五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整 ...

  7. VUE-003-前端表格数据展示时,设置单元格(el-table-column)保留空格和换行

    在使用 el-table 展示数据时,单元格中的数据有可能存在空格和换行符,若不进行设置,浏览器默认会取消空格和换行符,如下所示: 解决方法: 将单元格的样式 “white-space” 属性设置为“ ...

  8. 获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1

    获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1

  9. ajax 发送json数据时为什么需要设置contentType: "application/json”

    1. ajax发送json数据时设置contentType: "application/json”和不设置时到底有什么区别? contentType: "application/j ...

随机推荐

  1. python 实例方法,类方法,静态方法,普通函数

    python中有实例方法,类方法,静态方法,普通函数 类方法需要@ classmethod 修饰并且有个隐藏参数 cls,实例方法必须有个参数 self, 静态方法必须有 @staticmethod修 ...

  2. Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameter 标签: 构造器注入Spring

    问题:要么是因为构造方法改变了,要么就是构造方法入参实例化失败(比如没有实现) 问题 在练习spring构造器注入方式的小程序的时候报错: Exception in thread “main” org ...

  3. 单表操作ORM

    博客园 首页 新随笔 联系 管理 订阅 随笔- 0  文章- 339  评论- 29  Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 ...

  4. bzoj5469 [FJOI2018]领导集团问题

    题目描述: bz luogu 题解: 相当于树上$LIS$问题. 考虑一维情况下的贪心,我们可以用multiset启发式合并搞. 代码: #include<set> #include< ...

  5. (52)zabbix_sender提交item数据

    zabbix_sender是什么?有什么作用 zabbix获取key值有超时时间,如果自定义的key脚本一般需要执行很长时间,这根本没法去做监控,那怎么办呢?使用zabbix监控类型zabbix tr ...

  6. python学习第一天 计算机基础知识

    目录 什么是编程语言 什么是编程? 为什么要编程? 计算机5大组成分别有什么作用? qq启动的流程? 建议相关学习 课外 什么是编程语言 什么是编程语言? python和中文.英语一样,都是一门语言, ...

  7. shell-code-2-传参

    #在执行shell脚本时,带参数,如./test.sh 1 2 3,则在脚本test.sh内,参数表示为$n的形式,$1为第一个参数,以此类推. echo "第一个参数为:$1"; ...

  8. 与LCD_BPP相关的函数

    board/freescale/mx6q_sabresd/mx6q_sabresd.c:    panel_info.vl_bpix = LCD_BPP; common/lcd.c:   off  = ...

  9. Aizu-ALDS1_3_A:Stack

    D - Stack Write a program which reads an expression in the Reverse Polish notation and prints the co ...

  10. JQuery中如何处理键盘事件

    背景:比如在页面中,敲击回车键以后,实现登录功能,在之前的Winform开发时,也遇到过处理键盘事件的功能,比如游戏软件中,上下左右的移动等. 代码如下: $(document).keydown(fu ...