AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy HTTP POST: 10054 Connection reset by peer + Cookies (!)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Offene Frage von "blackdrake"
Ein Thema von blackdrake · begonnen am 18. Dez 2008 · letzter Beitrag vom 18. Jan 2009
Antwort Antwort
blackdrake

Registriert seit: 22. 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, 20: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
blackdrake

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

Re: Indy HTTP POST: 10054 Connection reset by peer + Cookies

  Alt 26. Dez 2008, 22:25
Ich habe jetzt folgendes versucht:

1. Nach jedem GET und POST wird ein .Disconnect() aufgerufen (ich habe die Klasse IdHTTP abgeleitet, um nichts zu vergessen). Die Cookies sterben zum Glück nicht und die Verbindung wird bei jedem Get() und Post() wieder neu aufgebaut.

Es scheint zu funktionieren.

2. Bei dem Beenden Problem habe ich das CanClose := true vor dem AOBJ.Terminate (= If-Connected-Then-Disconnect) gesetzt. Ich glaube es funktioniert ebenfalls. Eine 10054-Exception kommt zwar immer noch durch das If-Connected-Then-Disconnect, jedoch scheint die Anwendung jetzt kein Forced-Close mehr zu benötigen (bin mir aber nicht ganz sicher!)

Jetzt habe ich folgendes neues Problem:

Wenn meine Download-Prozedur z.B. durch einen Verbindungsabbruch oder einen 404 "abstürzt", dann funktioniert das Programm nicht mehr. Führe ich die Prozedur erneut aus, dann erscheint wieder der 404-Fehler. Der HTTP-Logger "Wireshark" zeigt mir, dass vor dieser Fehlermeldung KEINERLEI Internetverkehr fließt.

Bedeutet: IdHTTP "merkt" sich, wenn ein Get() oder Post() fehlgeschlagen ist und es wird die Prozedur NICHT mehr wiederholen, wenn ich erneut Get() oder Post() ausführe. Möglicherweiße durch das .Disconnect(). Wie kann ich den Fehlerstatus wieder entfernen? Brauche dringend Hilfe!
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

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

Re: Indy HTTP POST: 10054 Connection reset by peer + Cookies

  Alt 10. Jan 2009, 05:17
Hat denn keiner eine Idee, wie man Indy's Get/Post einsetzt, ohne dass das Programm abstürzt/seltsame Dinge macht, wenn die Internetverbindung kurz abreist?

Ich fahre mit meiner .Get() mit anschließenden .Disconnect() doch nicht so gut. Alle Nas lang läuft das Programm in den Exception-Block und zeigt mir dann meine Fehlermeldung, die den HTTP-Code enthält: "Es ist ein Fehler aufgetreten: 200 OK". Was soll ich machen und was soll dieser Unsinn?

Es müsste doch jemand eine gute Lösung für solche Probleme kennen, denn schließlich will ich ja nicht mal was exotisches - nur ein Get() und Post(), das nie abstürzt, wenn die Verbindung in der Idle-Phase abbricht und nur 1 Mal in den Exception-Block läuft wenn die Verbindung 1 Mal ausgefallen ist.
Daniel Marschall
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Indy HTTP POST: 10054 Connection reset by peer + Cookies

  Alt 10. Jan 2009, 12:20
Zitat von blackdrake:
Ich habe ein Problem mit Indy (Version bei Turbo Delphi Explorer).
Das scheint eine recht alte Version der Indy zu sein. Ich würde die neueste Version (10.2.X) von http://indy.fulgan.com/ZIP testen, wobei das Installieren in Delphi nicht erforderlich ist, wenn man die Komponente einfach dynamisch erzeugt.


Der Delphi Bibliotheks- und Suchpfad muss entsprechend auf das neue Indy-Verzeichnis umgebogen werden. (Ich installiere meist einfach in Verzeichnisse unter C:\Delphi).

Achtung: neuere Indy-Versionen können "breaking code" enthalten, wenn es also nicht sofort mit dem Kompilieren klappt, ist das nichts ungewöhnliches.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
blackdrake

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

Re: Indy HTTP POST: 10054 Connection reset by peer + Cookies

  Alt 11. Jan 2009, 17:39
Ja, das werde ich mal versuchen.

Da ich TD Explorer nutze, binde ich ja jetzt bereits die Indy-VCL dynamisch ein, deswegen muss im Code nichts ändern.

Habe mir jetzt dieses indy10.zip heruntergeladen, aber dort kann ich keine idHTTP.pas oder idHTTP.dcu finden. Was ist das dann für ein Package?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

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

Re: Indy HTTP POST: 10054 Connection reset by peer + Cookies

  Alt 13. Jan 2009, 21:23
Nachdem kein Indy10-Package verwendbar ist (da IdHTTP etc. überall fehlt) habe ich nun das stable Indy9 eingebunden.

Jetzt erhalte ich folgende Fehlermeldungen, bei denen ich keinen Sucherfolg hatte. Ist das schlimm?

Zitat:
[Pascal Warnung] IdGlobal.pas(184): W1010 Methode 'WaitFor' verbirgt virtuelle Methode vom Basistyp 'THandleObject'
[Pascal Hinweis] IdStack.pas(263): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHeaderList.pas(137): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHeaderList.pas(228): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHeaderList.pas(343): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTPHeaderInfo.pas(139): H2365 Schreibweise der Überschreiben-Methode TIdRequestHeaderInfo.destroy muss exakt ihrem Vorfahren TIdEntityHeaderInfo.Destroy entsprechen
[Pascal Hinweis] IdHTTPHeaderInfo.pas(437): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdRFCReply.pas(165): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdTCPServer.pas(967): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdTCPServer.pas(970): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdTCPServer.pas(975): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdTCPServer.pas(1079): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdCookie.pas(701): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdCookie.pas(701): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdCookie.pas(798): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdCookie.pas(798): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdCookie.pas(813): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(524): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(638): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(647): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(672): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(680): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(787): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(790): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(809): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(1357): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(1370): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(1370): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(1376): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
[Pascal Hinweis] IdHTTP.pas(1376): H2443 Inline-Funktion 'AnsiSameText' wurde nicht expandiert, weil Unit 'Windows' in der USES-Liste nicht angegeben ist
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

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

Re: Indy HTTP POST: 10054 Connection reset by peer + Cookies

  Alt 18. Jan 2009, 00:33
Weiß denn niemand was über Indy?

Indy 9 ist stabil und es gibt es schon seit Januar 2008, Turbo Delphi gibt es auch schon seit 2006. Wieso berichtet niemand über diese massigen Pascal-Warnungen oder kann mir helfen? Ich weiß nicht genau, was diese Meldungen bedeuten und ob es dadurch zu Programmfehlern kommen kann. Ausblenden kann ich die Meldungen leider nicht, ohne dass andere, nützliche Warnfunktionen mit abgeschaltet werden.
Daniel Marschall
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz