Einzelnen Beitrag anzeigen

Sougetsu

Registriert seit: 18. Feb 2009
20 Beiträge
 
#2

AW: IdHTTP - Post wird doppelt ausgeführt, warum?

  Alt 22. Okt 2013, 17:59
Moin zusammen,

wurde das Problem von 2005 eigtl. mal irgendwie gelöst?

Ich hab nämlich grad ein ähnliches Problem mit der INDY Komponente TIdHTTP.

Vorgestern erst ne aktuelle INDY Version installiert und die alte entfernt.

Zu den Gegebenheiten:
Auf meinem lokalhost hab ich eine xampp umgebung, das htdocs ist via .htaccess über digest Auth geschützt.

Das Program ist einfach zum testen gestrickt, INDY Kompo TIdHTTP auf die Form geknallt nen Button dazu mit OnClick event.
Beim draufdrücken wird dann gestartet, ein TIdMultipartFormDataStream erstellt und mit AddFieldForm und AddFile gefüllt.

Auf IdHTTP.POST(URL,Stream,RStream); baut INDY dann die verbindung auf und sendet den POST.
Vom Server bekommt er nun eine 401 Meldung zurück, dass Authorisiert werden muss.
idHTTP lädt den gesamten POST aber erstmal hoch bevor das OnAuthentization Event ausgelöst wird.
Somit wird erst nach dem Upload des POST die Authentifizierung verarbeitet.
INDY schließt nun die Verbindung und öffnet eine neue, sendet das POST diesmal mit der Authentisierung nochmal komplett hoch.

Im Apache Log findet man dann auch 2 neue Einträge die erste mit 401 beantwortet die 2. mit 200

Ich hab gestern mir ziemlich stark den Kopf zerbrochen wie man das evtl. umgehen könnte.
Da waren dann so versuche wie, erst im OnAuthentization den multi Stream der idHTTP.Request.Source anzuhängen.
Doch war das ergebnis leider auch doppel POST.

Kann es sich hier evtl. um einen BUG handeln oder sowas in der Richtung.

Die meisten suchen gingen in Richtung Basic Auth.
Das ziehmlich nächste war dieser Thread der meiner Suche am nächsten kommt.
Man findet die Konstellation aber auch fast garnicht im netz.
Indy Forum, Embarcadero Archiv etc.

Hoffe hier lässt sich jemand finden der das schon mal gemacht hat oder vllt. einfach nur die Lösung dazu kennt den 1. POST zu stoppen
und erst nach dem Auth den gesammten POST schickt.

LG aus Cologne
Sougetsu


EDIT:
ok das scheint ein generelles Problem zu sein.
Habe firefox mal genau so dazu gebracht, dass im firefox eine Seite aufgerufen die nicht mit htaccess geschützt wird und auf diese Seite eine FORM eingebettet die den POST dann an die Seite sendet die mit htaccess geschützt wird.
Firefox hat dabei genau das Gleiche gemacht wie die Delphi Anwendung. Erst mal den ganzen POST hochgeladen und mir dann das Authentifizierungsfenster angezeigt.
Nach der Authentifizierung dann nochmals den POST verschickt.
Ist ja auch klar, der Server kann erst agieren, wenn er den ganzen Request bekommen hat und dann mit seinem Respond Antworten.
Übers www macht man das ja auch normalerweise, man betritt eine Seite und wenn die geschützt ist bekommt man die Aufforderung sich anzumelden, danach bekommt man dann erst die Seite angezeigt mit formular und allem. Wenn man das dann ausfüllt und absendet kennt der Browser ja schon die Logindaten bzw kann evtl. den vorherigen access nutzen.
OK, jetzt müsste man nur noch indy dazu bekommen, dass es die TIdAuthorization oder was da passiert behält.
Denn bis jetzt, wenn ich 2 IdHTTP1.Post() schalte muss es sich auch 2x authentifizieren.

Geändert von Sougetsu (22. Okt 2013 um 22:23 Uhr)
  Mit Zitat antworten Zitat