我是想让IDHTTP在失去连接的情况下程序能够自动重新连接。
8 个解决方案
#1
帮顶一下
IDHTTP经常用
但是自动重连一直不会
IDHTTP经常用
但是自动重连一直不会
#2
跟一开始POST或GET一样.重新发下包就行了吧
#3
你怎么判断失去连接的。。。。
你怎么连接的?
#4
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);
我改成这样了。。。
#5
if not sIdHTTP.Connected then
sIdHTTP.Connect;
sIdHTTP.Connect;
#6
我刚好今天在看这个问题,我找到了重新连接抛异常的代码由TIdIOHandler.Connected里的CheckForDisconnect抛出
见CheckForDisconnect的申明:
procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True;
AIgnoreBuffer: Boolean = False); virtual; abstract;
所以想办法让IOHandler重新连接一次应该就可以了。
BTW.我的INDY是10.5.8.0
见CheckForDisconnect的申明:
procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True;
AIgnoreBuffer: Boolean = False); virtual; abstract;
所以想办法让IOHandler重新连接一次应该就可以了。
BTW.我的INDY是10.5.8.0
#7
我已经弄好了,自动重连的代码正解如下:
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是指向原地址的。我这暂时没这需求,需要的可以自己去试试。
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是指向原地址的。我这暂时没这需求,需要的可以自己去试试。
#8
刚才试了
IdHTTP.IOHandler=nil;(见SetIOHandler的代码)
后也可以重新请求,
不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。
IdHTTP.IOHandler=nil;(见SetIOHandler的代码)
后也可以重新请求,
不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。
#1
帮顶一下
IDHTTP经常用
但是自动重连一直不会
IDHTTP经常用
但是自动重连一直不会
#2
跟一开始POST或GET一样.重新发下包就行了吧
#3
你怎么判断失去连接的。。。。
你怎么连接的?
#4
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);
我改成这样了。。。
#5
if not sIdHTTP.Connected then
sIdHTTP.Connect;
sIdHTTP.Connect;
#6
我刚好今天在看这个问题,我找到了重新连接抛异常的代码由TIdIOHandler.Connected里的CheckForDisconnect抛出
见CheckForDisconnect的申明:
procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True;
AIgnoreBuffer: Boolean = False); virtual; abstract;
所以想办法让IOHandler重新连接一次应该就可以了。
BTW.我的INDY是10.5.8.0
见CheckForDisconnect的申明:
procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True;
AIgnoreBuffer: Boolean = False); virtual; abstract;
所以想办法让IOHandler重新连接一次应该就可以了。
BTW.我的INDY是10.5.8.0
#7
我已经弄好了,自动重连的代码正解如下:
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是指向原地址的。我这暂时没这需求,需要的可以自己去试试。
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是指向原地址的。我这暂时没这需求,需要的可以自己去试试。
#8
刚才试了
IdHTTP.IOHandler=nil;(见SetIOHandler的代码)
后也可以重新请求,
不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。
IdHTTP.IOHandler=nil;(见SetIOHandler的代码)
后也可以重新请求,
不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。