Delphi使用进行post数据时超时设置
因项目需要进行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数据时超时设置的更多相关文章
- SQL 数据库连续插入大批量数据时超时
经常会处理大批量千万级的数据,一直以来都没问题.最近在处理时确出来了经常超时,程序跑一段时间就得停下来重启服务器,根据几次的调整发现了问题的所在,产生这类问题主要是以下几点所导致: 1.数据 ...
- 使用iVMS-4200 存储录像数据时的设置
1.安装软件时,选择:存储服务器 2.对存储服务器进行配置,具体配置见 配置手册.
- libcurl使用easy模式阻塞卡死等问题的完美解决---超时设置
libcurl使用时疑难问题: 在使用libcurl时, jwisp发现, curl_easy_perform是阻塞的方式进行下载的, curl_easy_perform执行后,程序会在这里阻塞等待下 ...
- mysql/mariadb数据库在插入表数据时,ID竟然成奇数增加了?看完下面内容就知道怎么处理了。
今天突然被问到一个问题,mysql数据库插入表数据时,设置了ID自增,但是插入数据后,ID却呈奇数增加,不是123456类型,而是13579形式,突然有点懵,研究了一会,发现是auto_increme ...
- delphi tidhttp 超时设置无效的解决方法
现在delphi都发布到xe8了,tidhttp还有缺陷,那就是超时设置在没有网络或者连不上服务器的时候是无效的,不管你设置为多少都要10-20秒.connectTimeout和readTimeout ...
- 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时
五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整 ...
- VUE-003-前端表格数据展示时,设置单元格(el-table-column)保留空格和换行
在使用 el-table 展示数据时,单元格中的数据有可能存在空格和换行符,若不进行设置,浏览器默认会取消空格和换行符,如下所示: 解决方法: 将单元格的样式 “white-space” 属性设置为“ ...
- 获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1
获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1
- ajax 发送json数据时为什么需要设置contentType: "application/json”
1. ajax发送json数据时设置contentType: "application/json”和不设置时到底有什么区别? contentType: "application/j ...
随机推荐
- k sum(lintcode)
没通过的代码: class Solution { public: /* * @param A: An integer array * @param k: A positive integer (k & ...
- java程序-类的高级特性
创建Employee类,在类中定义三个属性:编号,姓名,年龄,然后在构造方法里初始化这三个属性,最后在实现接口中的定义的CompareTo方法,将对象按编号升序排列. 代码如下:(程序可能有些错误,方 ...
- AOP日志组件 多次获取post参数
AOP日志组件 多次获取post参数 需求:新增接口日志组件.通过拦截器对接口URL进行拦截处理,然后将接口post请求的参数与结果,写入日志表. 问题:POST方法的参数是存储在request.ge ...
- java在线聊天项目 swt可视化窗口Design 登录框注册按钮点击改变窗口大小——出现注册面板 实现打开登录框时屏幕居中
登录框注册按钮点击改变窗口大小——出现注册面板 首先用swt可视化设计登录窗口如下图: 此时窗口高度为578 没点击注册时高度为301(可自己定) 注意:注册用户的Jpanel 的border选择T ...
- VUE +element el-table运用sortable 拖拽table排序,实现行排序,列排序
Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大) 项目需求是要求能对element中 的table进行拖拽行排序 这里用到了sorttable Sortable ...
- [LUOGU] P1049 装箱问题
题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余 ...
- 菜鸟的《Linux程序设计》学习—shell script
1. 认识shell script shell script是利用shell的功能缩写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面, ...
- PAT Basic 1030
1030 完美数列 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数 ...
- 10大mysql需要注意的参数
MySQL变量很多,其中有一些MySQL变量非常值得我们注意,下面就为您介绍一些值得我们重点学习的MySQL变量,供您参考. 1 Threads_connected 首先需要注意的,想得到这个变量的值 ...
- Java-在JVM关闭前调用的函数
参考:http://qtlkw.iteye.com/blog/1018872 package com.tj; import java.text.SimpleDateFormat; import jav ...