AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Dateiname über HTTP auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiname über HTTP auslesen

Ein Thema von HiWieGehts · begonnen am 1. Apr 2013 · letzter Beitrag vom 2. Apr 2013
Antwort Antwort
HiWieGehts

Registriert seit: 19. Aug 2005
101 Beiträge
 
Delphi 10.4 Sydney
 
#1

Dateiname über HTTP auslesen

  Alt 1. Apr 2013, 16:20
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!
LG, HiWieGehts
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dateiname über HTTP auslesen

  Alt 1. Apr 2013, 16:38
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Dateiname über HTTP auslesen

  Alt 1. Apr 2013, 18:52
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.
Michael Justin
  Mit Zitat antworten Zitat
HiWieGehts

Registriert seit: 19. Aug 2005
101 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Dateiname über HTTP auslesen

  Alt 1. Apr 2013, 22:26
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?
LG, HiWieGehts
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Dateiname über HTTP auslesen

  Alt 1. Apr 2013, 23:44
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

Geändert von sx2008 ( 2. Apr 2013 um 01:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Dateiname über HTTP auslesen

  Alt 2. Apr 2013, 00:14
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Dateiname über HTTP auslesen

  Alt 2. Apr 2013, 00:23
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 = 'Athen 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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#8

AW: Dateiname über HTTP auslesen

  Alt 2. Apr 2013, 18:24
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
HiWieGehts

Registriert seit: 19. Aug 2005
101 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Dateiname über HTTP auslesen

  Alt 2. Apr 2013, 19:37
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.
LG, HiWieGehts
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#10

AW: Dateiname über HTTP auslesen

  Alt 2. Apr 2013, 20:05
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 02:30 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