Entwickler-Ecke
Internet / Netzwerk - IdHTTP1 (Connection Closed Gracefully)?
jackie05 - Sa 03.10.09 13:24
Titel: IdHTTP1 (Connection Closed Gracefully)?
Hallo,
ich möchte den Quelltext einer Seite auslesen, welche über eine Sichere Verbindung "SSL" läuft, leider bekomme ich immer diese Fehlermeldung in Delphi angezeigt:
Delphi-Quelltext
1:
| Erste Gelegenheit für Exception bei $7C812A7B. Exception-Klasse EIdOSSLConnectError mit Meldung 'Error connecting with SSL.'. Prozess Project1.exe (4596) |
Hier ist der Quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL; Quelltext: string; begin SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create; HTTP.CookieManager := IdCookieManager1; HTTP.IOHandler := SSLIOHandler; HTTP.HandleRedirects := true; HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10'; Quelltext := HTTP.Get('https://www.test-seite.com'); Memo1.Text := Quelltext; end; |
kann mir Vielleicht wer weiter helfen?
Vielen Dank schonmal.
MfG
jackie05 - Sa 03.10.09 20:02
Ich bin jetzt einwenig weitergekommen.
Ich versuche mich auf einer Seite einzuloggen über SSL und bekomme diese Fehlermeldung:
Delphi-Quelltext
1:
| Connection Closed Gracefully. |
Hier mal der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| var SSLIOHandler: TIdSSLIOHandlerSocketOpenSSL; Stream: TIdMultipartFormDataStream; Quelltext: string; begin SSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create; HTTP.CookieManager := IdCookieManager1; SSLIOHandler.SSLOptions.CertFile := 'SSL/test.cer'; SSLIOHandler.SSLOptions.VerifyDepth := 2; SSLIOHandler.SSLOptions.Method := sslvSSLv23; SSLIOHandler.SSLOptions.Mode := sslmClient; HTTP.Request.ContentType := 'application/x-www-form-urlencoded'; HTTP.HandleRedirects := true; HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10'; HTTP.ReadTimeout := 5000; HTTP.IOHandler := SSLIOHandler;
Stream := TIdMultipartFormDataStream.Create; Stream.AddFormField('_loginUID','jackie05'); Stream.AddFormField('_loginPWD','********'); Quelltext := Form1.HTTP.Post('https://www.testseite.com/de/login.aspx?do=login',Stream); Form1.Memo1.Text := Quelltext;
Stream.Free; end; |
Ich habe versucht die Meldung abzufangen, bringt mir aber nix, da die Rückgabe sowieso leer ist im Quelltext.
Was habe ich falsch gemacht?
MfG
jaenicke - Sa 03.10.09 23:34
Das ist kein Fehler, sondern nur die Benachrichtigung, dass die Verbindung von der anderen Seite normal beendet wurde.
Bei dir fehlt aber auch komplett die Exceptionbehandlung (try..finally und so), so dass du in Verbindung mit Indy ziemlich sicher Speicherlecks produzierst...
Delete - So 04.10.09 02:39
Wie jaenicke schon gesagt hat, das ist so in Ordnung. Ist nur etwas blöd von den Indys gelöst, eine Exceptions, also einen Ausnahmefehler, zu werfen, wenn alles geklappt hat. Keine Ahnung, warum die das so gemacht haben und nicht ein einfaches Ereignis definiert haben. Aber du bist nicht der erste, der darüber stolpert.
Xentar - So 04.10.09 03:21
Luckie hat folgendes geschrieben : |
| Wie jaenicke schon gesagt hat, das ist so in Ordnung. Ist nur etwas blöd von den Indys gelöst, eine Exceptions, also einen Ausnahmefehler, zu werfen, wenn alles geklappt hat. |
Naja, man versucht Daten zu lesen, obwohl die Verbindung bereits von der Gegenstelle geschlossen wurde. Ist doch (mehr oder weniger) ein Fehler, oder nicht?
Also ich selber finds ok (wenn man es denn weiß :) )
Edit: Ok, man kann drüber streiten, warum nicht einfach das OnDisconnect aufgerufen wurde..
jaenicke - So 04.10.09 04:16
Xentar hat folgendes geschrieben : |
| Naja, man versucht Daten zu lesen, obwohl die Verbindung bereits von der Gegenstelle geschlossen wurde. Ist doch (mehr oder weniger) ein Fehler, oder nicht? |
Nein, darum geht es nicht. Diese Exception wird ausgelöst
weil die Gegenseite die Verbindung beendet hat. Nicht weil man versucht danach noch zu lesen.
Exceptions sind bei Indy wirklich als Ausnahmen im Programmfluss gedacht,
nicht als Fehler.
Delete - So 04.10.09 04:24
Man könnte jetzt philosophieren, ob es wirklich eine Ausnahme ist, wenn die Gegenstelle die Verbindung beendet. Ich meine, wenn ich telefoniere und der andere Teilnehmer legt auf, nach dem wir uns verabschiedet haben, kann man das ja auch nicht unbedingt als Ausnahme bezeichnen, eher schon als Regel.
Martok - So 04.10.09 06:19
jaenicke hat folgendes geschrieben : |
| Exceptions sind bei Indy wirklich als Ausnahmen im Programmfluss gedacht, nicht als Fehler. |
Der war gut ;)
Indy schmeißt für jeden kleinen noch so kleinen Fehler eine Exception. Übrigens auch für jeden HTTP-Statuscode <> 200.
Jedenfalls, zum Connection Closed Gracefully haben die doch extra ganze Romane reinkommentiert, Source lesen hilft:
| IdTCPConnection.pas hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| | |
jaenicke - So 04.10.09 11:42
Richtig, im Quelltext steht einiges. Und dann steht hier auch noch etwas dazu:
| http://www.delphipraxis.net/post122870.html#122870 hat folgendes geschrieben: |
Diese Exception im original Source der INDY's zu kapseln oder zu entfernen ist eine ziemlich schlechte Idee, sie erfüllt nämlich eine sehr wichtige Aufgabe. Nur, das was du begreifen musst ist WAS die Indy Programmier unter einer Exception verstehen ! Wir gehen nur davon aus das Exception Fehler im programfluß sind, nun die Indy Programmierer sehen eine Exception als Außnahmebedingung also nicht unbedingt als Fehler im Programfluß. Diese Sichtweise ist sehr umstritten und ärgert viele Programmiere am Indy Konzept, aber man kan sich daran gewöhnen.
[...] |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!