![]() |
Idhttp wie an den Dateinamen kommen ?
Hi,
gibt es eine Möglichkeit, direkt über die Idny Komponente an den Dateinamen des auf dem Server hinterlegten Files zu kommen ? Oftmals hat man ja nur eine Url die dann über mehrere redirects erst an die Datei gelangt und somit hat die Url meist nicht sonderlich viel mit dem dahinter steckenden Dateinamen gemein. Bietet indy nun eine Funktion, die mir den Dateinamen beschafft ? Mfg Yannic |
Re: Idhttp wie an den Dateinamen kommen ?
Nein. Das geht - zum Glück - nicht.
Warum sollte der Webserver seine Dateipfade preisgeben? Liebe Grüße, Valle |
Re: Idhttp wie an den Dateinamen kommen ?
Ich gehe davon aus, dass er Weiterleitungen im HTTP-Header meint.
Diese kann man auslesen, wie genau kann ich aus dem Kopf heraus jetzt aber auch nicht sagen. |
Re: Idhttp wie an den Dateinamen kommen ?
Hi,
mals als Beispiel. Der Chip.de Downloadlink für Antivir sieht so aus: ![]() Wenn ich nun im Browser auf Download klicke steht im Downloaddialog Sie möchten folgende Datei herunterladen: "avira_antivir_personal10_de.exe" Nun können aber Downloadlinks einer anderen Website nun wieder ganz anders aussehen, so das man keine allgemeingültige Funktion zum auslesen des Dateinamen erstellen kann. Nun ist ebend die Frage ob die idhttp irgendwie erkennen kann wie die zu ladene Datei nun letzlich wirklich heißt. Mfg Yannic |
Re: Idhttp wie an den Dateinamen kommen ?
Zitat:
Zitat:
Aber TIdHttp geht ja selber diese Weiterleitungen nach. - es fragt die gewünschte URL ab und prüft den zurückgelieferten Header - kommt dort als Anweisung, daß eine andere URL gelesen werden soll, fängt es an diese URL zu lesen und das so lange, bis endlich eine Datei geliefert wird (oder bis zu einem Maximum an Umleitungen, wo dann abgebrochen wird) |
Re: Idhttp wie an den Dateinamen kommen ?
Die Rückgabe vom Header parsen...?!
![]()
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var MemStream: TMemoryStream; FileStream: TFileStream; begin MemStream := TMemoryStream.Create; try IdHTTP1.Get('http://www.deadlybossmods.com/download.php?id=1', MemStream); MemStream.Position := 0; FileStream := TFileStream.Create(FileName, fmCreate); try MemStream.SaveToStream(FileStream); finally FileStream.Free; end; finally MemStream.Free; end; end; procedure TForm1.IdHTTP1HeadersAvailable(Sender: TObject; AHeaders: TIdHeaderList; var VContinue: Boolean); var ContentDisposition: string; begin ContentDisposition := AHeaders.Values['Content-Disposition']; ContentDisposition := Copy(ContentDisposition, 1 + Pos(';', ContentDisposition), MaxInt); ContentDisposition := StringReplace(ContentDisposition, 'filename=', '', [rfIgnoreCase]); ContentDisposition := StringReplace(ContentDisposition, '"', '', [rfReplaceAll]); FileName := ContentDisposition; end; end. |
Re: Idhttp wie an den Dateinamen kommen ?
Zitat:
Das DownloadScript der DP leitet nicht an eine Datei weiter, sondern gibt sie selber aus und liefert dazu dann noch einen Dateinamen aus der DB zurück. |
Re: Idhttp wie an den Dateinamen kommen ?
Lässt sich der Header noch an einer anderen Stelle als im HeadersAvailable Event abfangen ?
Irgendwie über Idhttp.Request.XXX oder Idhttp.Response.XXX ? Mfg Yannic |
Re: Idhttp wie an den Dateinamen kommen ?
Wär mir jetzt auf Anhieb nicht bekannt
|
Re: Idhttp wie an den Dateinamen kommen ?
Hi,
kann es sein, dass Content-Disposition nicht immer im Header zurückgegeben wird ? Bei diesem Link zumindest taucht es im Header nicht auf: ![]() Woran liegt das ? Mfg Yannic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz