Einzelnen Beitrag anzeigen

Sougetsu

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

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

  Alt 25. Okt 2013, 17:22
Moin,

das hört sich nach einer Alternative an, hatte von der auch schon mal gehört.
Nur wie aktuell oder veraltet ist die ICS Kompo Andreas? Und was noch wichtiger
wäre, unterstützt es TLS 1.2?

CCRDude, das hatte ich auch gehofft. Hab mir die letzte SVN gezogen vor ein paar Tagen erst.
Doch scheint die Implementierung nicht vollständig zu sein. Da es so aussieht als würde die Kompo das Timeout der Gültigkeit der erfolgreichen Authorisierung + der Nonce am Ende verwerfen.

jeanicke, das hab ich natürlich auch versucht, gestern nach dem post hier hab ich mir
den code nochmal angeschaut und da ist mir auch ein kleiner vopa aufgefallen.
Hatte ja gehofft, dass wenn ich erst ein GET abschicke um die nonce zu erhalten, das es dann
mit dem direkt darauffolgenden POST klappen würde.
Doch die Request Methode wird mit in die Berechnung der Digest Authorisierung einbezogen.
Somit hilft die Methode HEAD leider auch nicht.

Hab das jetzt so umgangen, das ich erst ein Dummy POST rausgebe um nach der 401 zu hunten,
und im 2ten POST dann mit der Autorisierung, klappt soweit auch.

Der 3te POST rennt dann wieder gegen eine 401. Wäre natürlich toll wenn man das auch noch
irgendwie gelöst bekommen könnte.

Also ich denke indy muss da nochmal nachbessern, das die Timeouts + den NC Counter (hex)
gecheckt werden ob die erhaltene Nonce noch gültig ist um eine weiter response zu generieren.
Damit man weiterhin autorisiert bleibt.

Der Server sagt unter anderem auch wie oft man die nonce max nutzen darf, mein
Apache gibt mir dafür im header die max=99 zurück.


LG
Sougetsu

Edit:
So sieht das dann mit Dummy aus, für die die sich mit der selben Problematik befassen. Nicht elegant das für jeden Request zu machen, aber es funktioniert.
Delphi-Quellcode:
s:=IdHttp1.POST(URL, multi); // Ein Post-Request der als Dummy genutzt wird, mulri ist dabei ein leerer Stream. Indy bearbeitet die Authorisierung voll automatisch
multi.AddFormField('Test', 'Test');
multi.AddFile(Datei);
s:=IdHttp1.POST(URL, multi); // Der eigentliche Post-Request mit gefülltem multi Stream + gültiger Authorisierung.

Geändert von Sougetsu (25. Okt 2013 um 17:43 Uhr)
  Mit Zitat antworten Zitat