Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Dateiname über HTTP auslesen (https://www.delphipraxis.net/174068-dateiname-ueber-http-auslesen.html)

HiWieGehts 1. Apr 2013 15:20

Dateiname über HTTP auslesen
 
Hallo,

gibt es eine Möglichkeit über HTTP die Dateinamen und Verzeichnisse von einem Server zu lesen?
Habe in den letzten Tagen Vieles (IP*Works-jpwHTTP, Indy-IdHTTP, WinINet, URLMon) ohne Erfolg probiert. Es ist (relativ) einfach, eine Datei herunterzuladen, wenn der Name bekannt ist. Ich soll aber die Dateien am Client mit denen vom Server sychronisieren. Die jetzt verwendete Methode mit einem Konfigfile, welches die aktuellen Verzeichnis- und Filenamen enthält, führt immer wieder zu Problemen wegen Tippfehlern.
Daher möchte ich per HTTP die Namen lesen und das Konfigfile weglassen. Aber denkste, finde die File- und Verzeichnisnamen nicht.

Bitte um Unterstützung!

zeras 1. Apr 2013 15:38

AW: Dateiname über HTTP auslesen
 
Per HTTP wirst du meines Erachtens nicht weiterkommen. Ich kenne keine Möglichkeit, dies per HTTP zu tun, außer "try and error". Wenn du das ganze über ftp machen würdest, gibt es Befehle wie "DIR" oder so. Wenn du PHP auf dem Server hast, kannst du dir dann auch per PHP ein Konfigfile automatisch erzeugen lassen, welches du dann auslesen kannst. Das sind so meine Ideen dazu.

mjustin 1. Apr 2013 17:52

AW: Dateiname über HTTP auslesen
 
Ob die Inhalte angezeigt werden, ist serverabhängig. In der Frühzeit des WWW haben viele Server den Inhalt eines Verzeichnisses angezeigt, wenn man den Pfad angab (http://www.example.com/pfad/). Diese Option bieten auch aktuelle Versionen z.B. des Apache Webservers immer noch (siehe http://wiki.apache.org/httpd/DirectoryListings). Aus Sicherheitsgründen wird diese Option aber nicht aktiviert.

Eine Alternative ist die Verwendung einer automatisch erzeugten Konfigfiles wie im vorigen Beitrag beschrieben, je nach Anforderungen zum Beispiel mit PHP (dynamisch), oder als statisches Konfigfile dass regelmäßig oder bei Änderungen der vorhandenen Dateien manuell angestoßen regeneriert wird.

Eine von vielen HTTP Servern unterstützte (aber nicht immer auch aktivierte) Erweiterung des HTTP Protokolls namens WebDAV ermöglicht ebenfalls die Auflistung von Inhalten. Es hat den Vorteil ohne einen weiteren Port zu arbeiten. FTP ist nicht in allen Firewalls standardmäßig freigeschaltet.

HiWieGehts 1. Apr 2013 21:26

AW: Dateiname über HTTP auslesen
 
Danke erstmal für dfie Infos!
Habe mir inzwischen den Siteimport Assistent von Microsoft Expression Web angesehen. Dort wird im Prinzip das gemacht, was ich suche. Es werden die Dateien einer beliebigen HP - auch über HTTP - heruntergeladen. Aber ich habe keine Ahnung, wie die das machen. Weiß das vielleicht jemand?

sx2008 1. Apr 2013 22:44

AW: Dateiname über HTTP auslesen
 
Man muss den Webserver dazu bringen, bestimmte Header auszugeben.
Code:
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="Zieldateiname.ext"
Content-Disposition sagt dem Browser er soll das Download-Fenster öffnen anstatt die Datei direkt anzuzeigen.

Man kann das z.B. mit PHP bewerkstelligen: http://www.php-faq.de/q-datei-download.html
Oder man benützt ein CGI-Script oder auch eine CGI-Anwendung (kann auch in Delphi programmiert werden).

Mal angenommen du hast einen relativen HTML-Link auf ein PDF auf deiner Seite:
/doku/info2013.pdf
Wenn man diesen Link anklickt würde der Browser versuchen die PDF direkt anzuzeigen.
Verwendet man dagegen das CGI
/mein_downloader.cgi?resource=/doku/info2013.pdf
dann erzeugt das CGI den Content-Disposition-Header und schickt anschliesend die Daten.

Neben CGI gibt es auch noch andere Schnittstellen zum Webserver.

PS: falscher Thread

Sir Rufo 1. Apr 2013 23:14

AW: Dateiname über HTTP auslesen
 
Zitat:

Zitat von HiWieGehts (Beitrag 1209628)
Danke erstmal für dfie Infos!
Habe mir inzwischen den Siteimport Assistent von Microsoft Expression Web angesehen. Dort wird im Prinzip das gemacht, was ich suche. Es werden die Dateien einer beliebigen HP - auch über HTTP - heruntergeladen. Aber ich habe keine Ahnung, wie die das machen. Weiß das vielleicht jemand?

Die Default-Seite wird geladen und alle lokalen Links werden bestimmt und geladen. Html-Seiten werden weiter auf Links.

Versuch mal eine Datei auf den Server zu laden, die auf keiner Seite verlinkt ist. Diese wird nicht erkannt werden.

Bummi 1. Apr 2013 23:23

AW: Dateiname über HTTP auslesen
 
Das wäre ein Einstieg, langt aber nur für einfache Seiten

Delphi-Quellcode:
implementation
uses WinInet,mshtml, WinTypes,JpegErrors;

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin
  Webbrowser1.Navigate('http://www.google.de');
end;


Procedure GetWebBrowserHREFList(const AWebBrowser: TWebBrowser;List:TStrings) ;
var
  nCount  : Integer;
  elements : IHTMLElementCollection;
  element : IHTMLElement;
  sAnchor : String;
begin
  if Assigned(AWebBrowser.Document) then begin
    elements:= (AWebBrowser.Document as IHTMLDocument2).all;
    for nCount := 0 To Pred(elements.Length) do begin
      element := elements.item(nCount, '') as IHTMLElement;
      if element.tagName = 'A' then begin
         sAnchor := (element as IHTMLAnchorElement).href;
         List.Add(sAnchor);
      end;
    end;
  end;
end;


procedure TForm5.WebBrowser1NavigateComplete2(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  GetWebBrowserHREFList(TWebBrowser(ASender),Listbox1.items)
end;

zeras 2. Apr 2013 17:24

AW: Dateiname über HTTP auslesen
 
Zitat:

Zitat von HiWieGehts (Beitrag 1209628)
Danke erstmal für dfie Infos!
Habe mir inzwischen den Siteimport Assistent von Microsoft Expression Web angesehen. Dort wird im Prinzip das gemacht, was ich suche. Es werden die Dateien einer beliebigen HP - auch über HTTP - heruntergeladen. Aber ich habe keine Ahnung, wie die das machen. Weiß das vielleicht jemand?

Du mußt die Dateinamen kennen, ansonsten kannst du diese nicht laden. Es gibt kein "DIR" Kommando für HTTP.

Willst du also alle Dateien, die in einer Homepage verlinkt ist, laden, dann sollte das so gehen, wie oben beschrieben. Wenn du aber unbekannte Dateien laden willst, wird das nicht funktionieren.

An Hand von deinen Infos ist nicht genau zu erkennen, ob du eine Site analysieren und dann die entsprechenden Dateien downloaden willst, oder gezielt nur Dateien, die irgend jemand (der die Berechtigungen dazu hat) per FTP oder anders hochgeladen hast.
Vielleicht kannst du das genauer erklären.

HiWieGehts 2. Apr 2013 18:37

AW: Dateiname über HTTP auslesen
 
Zitat:

An Hand von deinen Infos ist nicht genau zu erkennen, ob du eine Site analysieren und dann die entsprechenden Dateien downloaden willst, oder gezielt nur Dateien, die irgend jemand (der die Berechtigungen dazu hat) per FTP oder anders hochgeladen hast.
Es geht um das Auswerten von Log-Daten div. Maschinen. Der Dateiname wird von der Maschine generiert und ist ein Zufallswert.
Früher wurde die Auswertung von einer Person gemacht. Jetzt sollen sich mehrere Personen darum kümmern. Ab Q3/13 wird es eine "ordentliche" Lösung geben. Für den Übergang wollte ich mit möglichst wenig Aufwand eine Downloadmöglichkeit schaffen. Werde mir die Tipps noch ansehen, aber ohne FTP wird's wohl nichts werden.
Danke jedenfalls für alle bisherigen Anregungen! Und vielleicht kommt die rettende Idee noch - müsste aber diese Woche sein.

zeras 2. Apr 2013 19:05

AW: Dateiname über HTTP auslesen
 
Zitat:

Zitat von HiWieGehts (Beitrag 1209738)
Der Dateiname wird von der Maschine generiert und ist ein Zufallswert.

Wenn das alles Zufallswerte sind, dann entweder per FTP oder du hast PHP auf dem Server installiert und kannst das Kommando "DIR" aufrufen. Diese Funktion könnte eine Datei auf dem Server ablegen mit dem Inhalt des Directories. Den Dateinamen legst du fest und dann lädst du als erstes diese Datei. Darin stehen dann die anderen Dateien, die du dann einzeln downloaden kannst.
Voraussetzung ist aber PHP.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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