![]() |
IdHTTP ignoriert Exception
Hallo Leute,
Ich bin gerade auf zwei Ungereimtheiten beim IdHTTP gestoßen, die ich mir selbst nicht erklären kann. Erstmal etwas Code zum ansehen:
Delphi-Quellcode:
Wie man sieht, läuft die Anfrage in einem Thread und greift auf einen .htaccess geschützten Bereich zu.
constructor THTTPThread.Create(CreateSuspended: Boolean; PostData: TStringList; Agentv: String);
begin inherited Create(CreateSuspended); HTTP := TIdHTTP.Create(nil); // HTTP-Kompo wird dynamisch erstellt FResult := TStringList.Create; params := TStringList.Create; params.assign(PostData); with HTTP do begin Request.UserAgent := 'SPMT-Registration v' + Agentv; Request.BasicAuthentication := True; Request.Username := 'user'; Request.Password := 'password'; end; end;
Delphi-Quellcode:
Bevor jemand fragt: params und url werden übergeben und sind deshalb nicht zu sehen.
procedure THTTPThread.Execute;
begin try FResponseCode := 200; HTTP.Response.Clear; FResult.Text := HTTP.Post(url, params); HTTP.Disconnect; FResponseCode := HTTP.ResponseCode; except on E: EIdHTTPProtocolException do begin FResponseCode := E.ErrorCode; case E.ErrorCode of //bla end; end; on E: EIdSocketError do begin FResponseCode := E.LastError; case E.LastError of //bla end; end; on E: EIdexception do begin FResult.Text := Format('Beim Aufbau der Verbindung ist ein %s Fehler aufgetreten. Der genaue Fehlertext ist:'#13#10#13#10'%s', [E.ClassName,E.Message]); end; end; Synchronize(DoNotifyFinish); end; Im Normalfall läuft hier alles bestens. Allerdings test ich gerade den "Nicht-Normalfall" ;) Und da bekomme ich Probleme: 1.) Wenn ich dem HTTP nur ein Passwort zuweise und Username und BasicAuth nicht setze, hängt sich der Thread mit 100% CPU auf ... ist das normal? 2.) Wenn BasicAuth, User und Pass nicht gesetzt sind, dann bekomme ich wie erwünscht eine EIdHTTPProtocolException mit 401 + Handling -> passt. Wenn ich aber alles setze und zB ein falsches Passwort vergebe, wird keine Exception geworfen. Der ResponseCode ist zwar 401, aber ohne EIdHTTPProtocolException. Und das ist ärgerlich, weil ich dann die Server-HTML-Fehlerseite im Programm angezeigt bekomme. Muss ich die HTTP-Responses jetzt explizit nach der Abfrage überprüfen (und das on EIdHTTPProtocolException verwerfen) oder gibt's da 'ne andere Möglichkeit? |
Re: IdHTTP ignoriert Exception
ich finde es völlig korrekt das keine Exception in dem Fall geworfen wird weil ja nichts schief geht sondern eine seite zurück geliefert wird mit den Hinweis das ein Passwort verlangt wird (Hinweis = Fehlercode)
|
Re: IdHTTP ignoriert Exception
Ja, aber da liegt ja das Problem. Der 401 Fehler "es wird ein Password verlangt" wird ja korrekt behandelt (-> Exception). Der 401 Fehler "Password ist falsch" wird jedoch ignoriert. Das ist es, was mich wundert ... für mich bleibt der zweite 401 immer noch "an unexpected numeric HTTP response code" und sollte daher laut Indy-Hilfe die Exception auslösen.
|
Re: IdHTTP ignoriert Exception
ich könnte mir vorstellen das in den Programmierern der Indys folgendes vorging:
Wenn man eine Seite aufruft ohne zu wissen das ein Passwort benötigt wird sollte man drauf aufmerksam gemacht werden (per Exception) Wenn man weiß das ein Passwort benötigt wird und eines mitschickt, so weiß man auch das man den Erfolg kontrollieren sollte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz