Entwickler-Ecke
Internet / Netzwerk - keine exception wenn http server fehler meldet
pc-crack - Fr 12.02.10 22:30
Titel: keine exception wenn http server fehler meldet
ich möchte auf einen http-server aber dieser liefert nicht immer ein Ergebnis wieder. bei einem falschen Aufruf kommt ein Fehlermeldung (Zugendes wenn ich es mit einem Exporer mache).
ich nutze TIdHTTP aber beim Aufruf kommt dann immer "HTTP/1.1 500 Internal Server Error" und die Routine wird abgebrochen.
jaenicke - Sa 13.02.10 08:16
pc-crack hat folgendes geschrieben : |
| ich nutze TIdHTTP aber beim Aufruf kommt dann immer "HTTP/1.1 500 Internal Server Error" und die Routine wird abgebrochen. |
Das hört sich danach an als würdest du den Fehler nicht richtig abfangen, wie sieht denn dein Code aus?
Normal wäre ja so etwas, wenn man trotz Fehler weitermachen will:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| uses IdHttp;
var HttpLoader: TIdHttp; PageContents: String; begin HttpLoader := TIdHttp.Create; try try PageContents := HttpLoader.Get('http://www.example.com'); except if Application.MessageBox('Fehler, trotzdem weitermachen?', ...) <> mrYes then raise; end; ShowMessage('Weitergemacht'); ... finally HttpLoader.Free; end; end; |
Der Fehler wird abgefangen und angezeigt, wenn nicht fortgesetzt werden soll aber wieder ausgelöst, damit direkt der Rest übersprungen und finally ausgeführt wird zum Aufräumen.
In Delphi wird die Exception natürlich dennoch angezeigt, wenn das nicht ausgeschaltet ist und das Programm aus Delphi mir Debugger gestartet wird. Aber beim separat gestarteten Programm sieht man nix mehr.
pc-crack - Sa 13.02.10 21:28
wenn es den so einfach wäre...
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: 26: 27: 28:
| function TIdHTTPProtocol.ProcessResponse(AIgnoreReplies: array of SmallInt): TIdHTTPWhatsNext;
procedure CheckException(AResponseCode: Integer; ALIgnoreReplies: array of Smallint; AUnexpectedContentTimeout: Integer = IdTimeoutDefault); var i: Integer; LTempResponse: TMemoryStream; LTempStream: TStream; begin LTempResponse := TMemoryStream.Create; LTempStream := Response.ContentStream; Response.ContentStream := LTempResponse; try FHTTP.ReadResult(Response, AUnexpectedContentTimeout); if High(ALIgnoreReplies) > -1 then begin for i := Low(ALIgnoreReplies) to High(ALIgnoreReplies) do begin if AResponseCode = ALIgnoreReplies[i] then begin Exit; end; end; end; LTempResponse.Position := 0; finally Response.ContentStream := LTempStream; FreeAndNil(LTempResponse); end; end; |
Der auskommentiere teil der idHTTP sorgt dafür das zumindest kein Fehler mehr kommt. selbst
Delphi-Quelltext
1: 2: 3: 4: 5:
| try raise EIdHTTPProtocolException.CreateError(AResponseCode, FHTTP.ResponseText, ReadStringFromStream(LTempResponse, -1, ContentTypeStrToEncoding(FHTTP.Response.FContentType))); finally
end; |
hilft nicht
---
Moderiert von
Narses: Beiträge zusammengefasst---
ich muss nur den Fehler 500 separat behandeln...
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: 26: 27: 28:
| . . . if LResponseDigit <> 2 then begin case LResponseCode of 500: begin end; 401: begin if (FHTTP.AuthRetries >= FHTTP.MaxAuthRetries) or (not FHTTP.DoOnAuthorization(Request, Response)) then begin if Assigned(Request.Authentication) then begin Request.Authentication.Reset; end; CheckException(LResponseCode, AIgnoreReplies); Result := wnJustExit; Exit; end else begin LNeedAuth := hoInProcessAuth in FHTTP.HTTPOptions; end; end; 407: ... |
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!