Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

Indy HTTP POST: 10054 Connection reset by peer + Cookies (!)

  Alt 18. Dez 2008, 19:23
Hallo.

Ich habe ein Problem mit Indy (Version bei Turbo Delphi Explorer).

Ich erhalte manchmal, z.B. beim Benutzen von Proxies oder bei plötzlicher Servertrennung die Meldung 10054 "Connection reset by peer". Das Problem ist, dass die Verbindung unterbrochen wird und der IdHTTP keine Daten mehr an den Server senden kann.

Nun kommen bei mir folgende Sonderfälle hinzu, die vielleicht bei den meisten 0-8-15 in Foren besprochenen Themen vielleicht nicht direkt vorkommen:

1. Ich bin auf ein Cookie angewiesen. Dieses MUSS erhalten bleiben, damit der Benutzer eingeloggt ist und die korrekten Daten erhält.
2. Ich verwende keine Connect() oder Disconnect-Methoden. Ich verwende lediglich .Get() und .Post()
3. Das Programm hat eine lange Laufzeit und .Get und .Post werden nur auf Benutzeranfrage durchgeführt. Trotzdem bleibt die Verbindung aufgrund der Cookies bestehen.

Desweiteren nutze ich den IdCookieManager als Klasse (modif. http://www.delphipraxis.net/internal...=918858#918858 ).

Jetzt habe ich nach vielen Recherchen herausgefunden, dass man bei längerer Inaktivität die Verbindung trennen und wieder neu aufbauen soll.

Aber: Wie mache ich das? Ich könnte nach jedem .Get() und .Post() zwar die Verbindung kappen. Aber wie connecte ich anschließend wieder? Das ganze Socket-Connect Zeug macht IdHTTP ja in Form von Get() und Post() für mich, sodass ich mich darum nicht mehr kümmern muss, sondern nur die GET und POST Anfragen an den Server schicke. Und was ist mit den Cookies?

Am liebsten wäre mir ja, wenn ich eine Klasse hätte, die IdHTTP erweitert und .Get und .Post so verändert, dass bei einem 10054 die Verbindung einfach neu aufgebaut wird, unter Beibehaltung aller Cookies etc.

PS: Es kommt noch hinzu, dass mein Programm sich nicht mehr beenden lässt, wenn die Verbindung einmal abgebrochen ist, was echt nervt. Es wird folgendes ausgeführt:

Delphi-Quellcode:
procedure TDownloaderForm.form_close_query(Sender: TObject; var CanClose: Boolean);
begin
  if not NoCloseConfirmation then
  begin
    case MessageShow(mstConfirmation, LNG_REALLY_QUIT_DOWNLOAD, MB_YESNOCANCEL) of
      idYes: begin
                  AOBJ.Terminate;
                  CanClose := true;
                end;
      idNo: CanClose := false;
      idCancel: CanClose := false;
    end;
  end;
end;

procedure TMyObject.Terminate;
begin
  if FHTTP.Connected then FHTTP.Disconnect;
  FHTTP.Tag := 1;
end;
Hat jemand eine Idee?

Gruß
Daniel Marschall
Daniel Marschall
  Mit Zitat antworten Zitat