如何让IDHTTP超时后重新连接啊???

nkym0626 2010-09-16 12:55:55
搜了一大堆东西都没有解决问题。
我是想让IDHTTP在失去连接的情况下程序能够自动重新连接。
...全文
475 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
applebomb 2010-11-10
  • 打赏
  • 举报
回复
刚才试了
IdHTTP.IOHandler=nil;(见SetIOHandler的代码)
后也可以重新请求,
不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。
applebomb 2010-11-10
  • 打赏
  • 举报
回复
我已经弄好了,自动重连的代码正解如下:

if Assigned(IdHTTP.IOHandler) then
IdHTTP.IOHandler.Open;

IdHTTP.Post(FURLBase + URLPath, Strings, AResponseContent); //你自己的使用URL重连的代码

5楼的代码必须在设置好IdHTTP的主机等信息的情况下才能那样用,然而通常我们是直接使用一个URL,写代码去分解URL等于是在重复造了轮子

再继续推可得,如果该IDHTTP已经成功请求过一次,要更换一个URL地址来请求,可以尝试FreeAndNil掉IdHTTP.IOHandler因为之前生成的IOHandler是指向原地址的。我这暂时没这需求,需要的可以自己去试试。
applebomb 2010-11-10
  • 打赏
  • 举报
回复
我刚好今天在看这个问题,我找到了重新连接抛异常的代码由TIdIOHandler.Connected里的CheckForDisconnect抛出

见CheckForDisconnect的申明:
procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True;
AIgnoreBuffer: Boolean = False); virtual; abstract;

所以想办法让IOHandler重新连接一次应该就可以了。

BTW.我的INDY是10.5.8.0
SQLDebug_Fan 2010-09-16
  • 打赏
  • 举报
回复
if not sIdHTTP.Connected then
sIdHTTP.Connect;
Mit1208 2010-09-16
  • 打赏
  • 举报
回复
跟一开始POST或GET一样.重新发下包就行了吧
nkym0626 2010-09-16
  • 打赏
  • 举报
回复

repeat
bError := True;
try
tmpWebCode := UTF8Decode(sIdHTTP.Get(DetailURL));
except
bError := False;
sIdHTTP.Free;
sIdHTTP := TIdHTTP.Create(nil);
sIdHTTP.HandleRedirects := True;
sIdHTTP.ReadTimeout := 10000;
frmMain.StatusBar1.Panels[4].Text :='详细信息错误 ' + strListCompanyName.Strings[i] + ' ' + IntToStr(k) + ' 次';
if k =4 then
begin
bError := True;
bakStrList.Add(strListCompanyName.Strings[i] + '---详细');
bakStrList.SaveToFile(ExtractFilePath(ParamStr(0))+fName);
end;
inc(k);
end;
until (bError);


我改成这样了。。。
haochin 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 nkym0626 的回复:]
搜了一大堆东西都没有解决问题。
我是想让IDHTTP在失去连接的情况下程序能够自动重新连接。
[/Quote]

你怎么判断失去连接的。。。。
你怎么连接的?
ADSLAN 2010-09-16
  • 打赏
  • 举报
回复
帮顶一下
IDHTTP经常用
但是自动重连一直不会

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧