如何让IDHTTP超时后重新连接啊??? 搜了一大堆东西都没有解决问题。我是想让IDHTTP在失去连接的情况下程序能够自动重新连接。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 跟一开始POST或GET一样.重新发下包就行了吧 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);我改成这样了 if not sIdHTTP.Connected then sIdHTTP.Connect; 我刚好今天在看这个问题,我找到了重新连接抛异常的代码由TIdIOHandler.Connected里的CheckForDisconnect抛出见CheckForDisconnect的申明: procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True; AIgnoreBuffer: Boolean = False); virtual; abstract;所以想办法让IOHandler重新连接一次应该就可以了。BTW.我的INDY是10.5.8.0 我已经弄好了,自动重连的代码正解如下: 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是指向原地址的。我这暂时没这需求,需要的可以自己去试试。 刚才试了IdHTTP.IOHandler=nil;(见SetIOHandler的代码)后也可以重新请求,不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。 MS SQL 数据比对问题 送分!20 关于‘流’的操作 有关MonthCalendar1的问题 高手请进: 在DELPHI中如何解决ACTIVEX DLL类型定义问题 高手指点,取出文本文件中的有效数据另存temp.txt? 简单问题!单击按钮时,怎样让这个窗体的dbgrid的某一列不可见? 怎样做出像foxmail 属性 窗体的那种效果 各位delphi用什么方法可以显示从话筒传入电脑的声音的频率 送分题:学delphi看什么书比较好 FastReport中两个主项数据能否并排放啊?(delphi) ImageEN高手进来,怎么才能让imageenvect控件上只有一个用户画的图形
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);
我改成这样了
sIdHTTP.Connect;
procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True;
AIgnoreBuffer: Boolean = False); virtual; abstract;所以想办法让IOHandler重新连接一次应该就可以了。BTW.我的INDY是10.5.8.0
IdHTTP.IOHandler.Open; IdHTTP.Post(FURLBase + URLPath, Strings, AResponseContent); //你自己的使用URL重连的代码5楼的代码必须在设置好IdHTTP的主机等信息的情况下才能那样用,然而通常我们是直接使用一个URL,写代码去分解URL等于是在重复造了轮子再继续推可得,如果该IDHTTP已经成功请求过一次,要更换一个URL地址来请求,可以尝试FreeAndNil掉IdHTTP.IOHandler因为之前生成的IOHandler是指向原地址的。我这暂时没这需求,需要的可以自己去试试。
IdHTTP.IOHandler=nil;(见SetIOHandler的代码)
后也可以重新请求,
不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。