Einzelnen Beitrag anzeigen

Master-of-Magic

Registriert seit: 24. Jul 2006
37 Beiträge
 
Delphi 2005 Personal
 
#1

IdHTTP ignoriert Exception

  Alt 26. Mai 2007, 19:32
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:
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;
Wie man sieht, läuft die Anfrage in einem Thread und greift auf einen .htaccess geschützten Bereich zu.

Delphi-Quellcode:
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;
Bevor jemand fragt: params und url werden übergeben und sind deshalb nicht zu sehen.

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?
  Mit Zitat antworten Zitat