AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi idhttp + Redirect behandeln
Thema durchsuchen
Ansicht
Themen-Optionen

idhttp + Redirect behandeln

Ein Thema von codipodi · begonnen am 29. Apr 2012 · letzter Beitrag vom 5. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#1

idhttp + Redirect behandeln

  Alt 29. Apr 2012, 09:21
Hallo zusammen,
ich habe folgendes Problem mit der IndyHTTPGetThreaded Demo von Luckie:
http://www.michael-puff.de/Programmi...etThreaded.zip

Der Downloadthread soll eine Prozedur aufrufen (updatedata) welche natürlich erst dann ausgeführt werden soll wenn der Download komplett fertig ist. Jetzt habe ich jedoch das Problem das teilweise ein oder mehrere Redirects erfolgen und der Downloadthread meiner Meinung nach jedes mal das FWorkEndevent auslöst.

Ist die Analyse soweit korrekt? Falls ja, wie kann ich das beheben?

Ich habe mir folgendes gebastelt, aber es scheint nicht komplett zu funktionieren. Teilweise lädt er dann komplett herunter aber führt ShowEnd nicht aus.

idHTTP.OnRedirect:=erkenneredirect;
Delphi-Quellcode:
procedure TDownloadThread.erkenneredirect(Sender: TObject; var dest: string; var
    NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
begin
   Handled := True;
  redirectnr:=redirectnr+1;
end;
Delphi-Quellcode:
procedure TDownloadThread.FWorkEndevent(ASender: TObject; AWorkMode: TWorkMode);
begin
if redirectnr <= 0 then Synchronize(ShowEnd)
else redirectnr:=redirectnr-1;
end;
Delphi-Quellcode:
procedure TDownloadThread.ShowEnd;
begin
 form1.updatedata;
end;

PS: Ich habe das Thema am 26.04 im delphi-forum geposted, dort konnte mir jedoch keiner helfen. Sollten wir hier ein Ergebnis erzielen werde ich es dann dort auf diesen Topic verweisen.

Danke!

LG,
Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#2

AW: idhttp + Redirect behandeln

  Alt 2. Mai 2012, 07:37
Hallo nochmal,
also ich muss ehrlich zugeben, ich verstehe nicht warum niemand antwortet.

Mir ist bewusst das ich dem Forum bislang noch nichts zurückgeben konnte, aber ich habe mich ja auch gerade erst angemeldet.

Oder liegt es an der Fragestellung?

Bitte helft mir oder erklärt mir zumindest warum Hilfe nicht möglich ist. Ich mache mir jetzt seit über einer Woche Gedanken zu dieser Thematik und bin langsam verzweifelt.

Vielen Dank.

LG,
Christian
Christian
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: idhttp + Redirect behandeln

  Alt 2. Mai 2012, 07:44
Guten Morgen Christian,

du kannst doch die Eigenschaft .HandleRedirect des idHttp Clients auf true setzen,
dann musst Du dich nicht selber mit den redirects rumschlagen.

Dann noch zum Grundverständnis meinerseits, warum treten Redirects auf, wenn ich ein File laden will. Ich meine Redirects treten nur dann auf bis man die Datei gefunden hat.

request an WebServer -> redirect - WebServer2 -> redirect - WebServer3 - hier liegt die Datei.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#4

AW: idhttp + Redirect behandeln

  Alt 2. Mai 2012, 08:00
Hallo Klaus,
vielen Dank für deine Antwort.

Also der idhttp steht bereits auf HandleRedirects=true.

Ich habe aber das Gefühl das trotzdem bei jedem Redirect das FWorkEndevent ausgelöst wird. Oder ist das nicht korrekt?

Vielen Dank.

LG,
Christian
Christian
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: idhttp + Redirect behandeln

  Alt 2. Mai 2012, 08:22
Ich habe aber das Gefühl das trotzdem bei jedem Redirect das FWorkEndevent ausgelöst wird. Oder ist das nicht korrekt?
.. da bin ich mir nicht 100%ig sicher.
Bei jedem Redirect wird ja auch eine Information zum Client zurückgeschickt (die neue URL)
es ist durchaus nachvollziehbar das dadurch (wenn die Information komplett beim Client angekommen ist) ein WorkEnd Event ausgelöst wird.

Aber sollte HandleRedirect dieses nicht vermeiden?

Delphi-Quellcode:
procedure TDownloadThread.Execute;
var
  IdHTTP: TIdHTTP;
begin
  IdHTTP := TIdHTTP.Create(nil);
  try
    idHTTP.HandleRedirects := true; // hast Du das eingefügt?
    IdHTTP.OnWorkBegin := FWorkBeginEvent; //FWorkBeginEvent;
    IdHTTP.OnWork := FWorkEvent;
    IdHTTP.OnWorkEnd := FWorkEndevent;
    FCode := IdHTTP.Get(URL);
  finally
    IdHTTP.Free;
  end;
  Synchronize(ShowCode);
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#6

AW: idhttp + Redirect behandeln

  Alt 2. Mai 2012, 08:28
Hallo Klaus,
erneut besten Dank für deine Antwort.

Die Zeile hatte ich bereits integriert. Aber irgendwie habe ich das Gefühl das dennoch das EndEvent ausgelöst wird.

Je nach URL habe ich mit eigenen Augen gesehen das der Fortschrittsbalken komplett bis zum Ende springt innerhalb einer Sekunde und das EndEvent auslöst. Dann allerdings wieder neu anfängt die Datei zu laden. Daher halte ich diesen Effekt für einen Redirect.

Durch dieses vorzeitige auslösen des EndEvents kann die Datei natürlich nicht weiterverarbeitet werden da sie ja noch garnicht richtig heruntergeladen wurde.

LG,
Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#7

AW: idhttp + Redirect behandeln

  Alt 4. Mai 2012, 08:46
Nochmal ein Hilferuf an alle:
Wie kann ich das Problem lösen? Entweder habe ich ein Brett vor dem Kopf oder das Problem ist doch größer als gedacht.

Ich habe leider überhaupt keine Idee wie ich diesen Fehler aus der Welt schaffen kann, meine gepostete Lösung funktioniert ja anscheinend nicht.

Über Hilfe und Anmerkungen jeglicher Art wäre ich wirklich äußerst dankbar.

in verzweifelter Hoffnung,
Christian
Christian
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#8

AW: idhttp + Redirect behandeln

  Alt 4. Mai 2012, 09:59
Dann allerdings wieder neu anfängt die Datei zu laden. Daher halte ich diesen Effekt für einen Redirect.
Hallo,
mittels Wireshark lässt sich der komplette Datenverkehr aufzeichnen. Damit solltest du problemlos herausbekommen ob es eine Weiterleitung gibt. Ich glaube eher, dass die Fortschrittsbalken etwas spinnen weil es da immer wieder mal Probleme mit der Firewall o.ä. gibt. Mit dem Debugger Haltepunkte setzen und durch den Code steppen wäre auch noch eine Möglichkeit

Ein weiterer möglicher Ansatz wäre mit der Dateigröße zu arbeiten (TIdHTTP.Response.ContentLength) und immer zu schauen, wie viel hat er im OnWork-Work Event gerade herunter geladen (was fehlt noch).

Und zuletzt bleibt mir noch zu sagen, dass es natürlich immer besser ist mit einer aktuellen Indy Version zu arbeiten.

Grüße
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von codipodi
codipodi

Registriert seit: 29. Apr 2012
Ort: Duisburg
16 Beiträge
 
Delphi 2007 Professional
 
#9

AW: idhttp + Redirect behandeln

  Alt 4. Mai 2012, 10:46
Hallo Sebastian,
vielen Dank für deine Antwort.

Das Problem ist allerdings das nicht nur der Balken vorspringt sondern auch das Endevent ausgelöst wird. Ich habe dies überprüft.

Wenn mir niemand sagen kann warum meine Prozedur nicht funktioniert, gibt es dann eine andere Möglichkeit zu erkennen ob das Event zu früh ausgelöst wird?

Ich werde zunächst versuchen zu prüfen ob TIdHTTP.Response.ContentLength zu klein für eine richtige Datei ist.

LG,
Christian
Christian
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

AW: idhttp + Redirect behandeln

  Alt 4. Mai 2012, 16:21
Entweder habe ich ein Brett vor dem Kopf
Yes, Sir.
Delphi-Quellcode:
procedure TDownloadThread.Execute;
var
  IdHTTP: TIdHTTP;
begin
  IdHTTP := TIdHTTP.Create(nil);
  try
    idHTTP.HandleRedirects := true; // hast Du das eingefügt?
    IdHTTP.OnWorkBegin := FWorkBeginEvent; //FWorkBeginEvent;
    IdHTTP.OnWork := FWorkEvent;
    IdHTTP.OnWorkEnd := FWorkEndevent;
    FCode := IdHTTP.Get(URL);
    // HIER !!
    // ist die Stelle, an der alle Redirekts ausgeführt wurden
    // und die Daten heruntergeladen wurden (oder auch nicht falls Status <> 200)
  finally
    IdHTTP.Free;
  end;
  Synchronize(ShowCode);
end;
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:09 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