AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdHTTP ignoriert Exception
Thema durchsuchen
Ansicht
Themen-Optionen

IdHTTP ignoriert Exception

Offene Frage von "Master-of-Magic"
Ein Thema von Master-of-Magic · begonnen am 26. Mai 2007 · letzter Beitrag vom 26. Mai 2007
Antwort Antwort
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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: IdHTTP ignoriert Exception

  Alt 26. Mai 2007, 19:38
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Master-of-Magic

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

Re: IdHTTP ignoriert Exception

  Alt 26. Mai 2007, 19:44
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: IdHTTP ignoriert Exception

  Alt 26. Mai 2007, 21:05
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 11:03 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