搜了一大堆东西都没有解决问题。
我是想让IDHTTP在失去连接的情况下程序能够自动重新连接。

解决方案 »

  1.   

    跟一开始POST或GET一样.重新发下包就行了吧
      

  2.   


          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);
    我改成这样了
      

  3.   

    if not sIdHTTP.Connected then 
      sIdHTTP.Connect;
      

  4.   

    我刚好今天在看这个问题,我找到了重新连接抛异常的代码由TIdIOHandler.Connected里的CheckForDisconnect抛出见CheckForDisconnect的申明:
        procedure CheckForDisconnect(ARaiseExceptionIfDisconnected: Boolean = True;
         AIgnoreBuffer: Boolean = False); virtual; abstract;所以想办法让IOHandler重新连接一次应该就可以了。BTW.我的INDY是10.5.8.0
      

  5.   

    我已经弄好了,自动重连的代码正解如下:  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是指向原地址的。我这暂时没这需求,需要的可以自己去试试。
      

  6.   

    刚才试了
    IdHTTP.IOHandler=nil;(见SetIOHandler的代码)
    后也可以重新请求,
    不过是重新再生成一个IOHandler了,除非更换请求的地址最好还是不要这样。