Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdHTTP (Indy 10) Methode für lokale Dateien? (https://www.delphipraxis.net/108258-tidhttp-indy-10-methode-fuer-lokale-dateien.html)

hj-s 10. Feb 2008 08:28


TIdHTTP (Indy 10) Methode für lokale Dateien?
 
Hallo,
welche TIdHTTP (Indy 10) Methode kann man auch für lokale Dateien nutzen?
Es geht um folgendes:
Ich möchte eine komplette Webseite auf fehlerhafte Links testen.
Dies soll sowohl auf einem Server, als auch auf dem eigenen Rechner funktionieren.
IdHTTP.Get(http://hj-schymura.de) liefert die richtigen Daten
aber kann ich dies auch mit einer lokalen Datei D:\Test\index.html erreichen????
Ich möchte nicht mit Delphi FileExists arbeiten, denn ich dann müsste ich die Datei erst lesen und sylbst interpretieren und kann dann nicht wie bei Indy IdHTTP.Head zuerst die über Response.RawHeaders.Text den Dokumenttyp feststellen.
Kann mir da jemand eine richtige Auskunft geben?
Fragende Grüße. :oops:

marabu 10. Feb 2008 12:45

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?
 
Herzlich willkommen in der Delphi-PRAXiS, Heinz-Jürgen.

Die von dir beschriebene Funktionalität ist eng mit dem HTTP-Protokoll verbunden und auch die Indy-Komponente TIdHTTP kennt nur dieses Protokoll. Da ich nicht genau erkennen kann worauf es dir wirklich ankommt, hier nur noch ein Hinweis: Du kannst auch auf lokale Dateien per HTTP zugreifen, wenn du dir einen lokalen Web-Server installierst. Allerdings muss der Speicherort deiner Dateien diesem bekannt gemacht werden, damit er sie dir ausliefern kann. Da stellt sich allerdings die Frage, ob du die benötigten Informationen nicht anders billiger bereitstellen kannst. Und Lesen musst du eine lokale Datei ja sowieso, wenn du die darin enthaltenen Links prüfen willst.

Freundliche Grüße

hj-s 10. Feb 2008 16:35

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?
 
Hallo marabu,
danke für die Antwort.
Zitat:

Du kannst auch auf lokale Dateien per HTTP zugreifen, wenn du dir einen lokalen Web-Server installierst.
Klar, das geht, z.B. mit xampp.
Zitat:

Und Lesen musst du eine lokale Datei ja sowieso, wenn du die darin enthaltenen Links prüfen willst.
Ja, das stimmt schon. Aber wenn ich zum Beispiel in einer Datei einen Link habe kann ich mit IdHTTP.Head(URL) mir nur die Informationen holen, ob es die Datei gibt, eventuell wo sie nun liegt (Weiterleitung), und um welche Art von Dokument es sich handelt (text/html oder image/gif oder sonstwas) und brauche dann, wenn es sich um keine html Datei handelt die ganze Seite nicht erst zu laden und dann eventuell den Versuch zu machen dort Links zu suchen etc....
Besonders vorteilhaft erscheint mir dieses, wenn es sich um große Media Dateien handelt.
Ich hatte schon befürchtet, dass die Indy Sachen sich nur wirklich in Verbindung mit einem Server nutzen lassen.
Es wäre halt nur viel einfacher gewesen....
Schöne Grüße.

marabu 10. Feb 2008 17:26

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?
 
Hast du schonmal erwogen, für lokale Dateien eine eigene Heuristik zu implementieren? Oft genügen die ersten vier Zeichen um den Inhalt zu kategorisieren: Ein vorhandenes Byte-Order-Mark signalisiert die Kodierung und ein Less-Than kennzeichnet Markup, falls kein Verlass auf die Dateierweiterung ist.

ThE_-_BliZZarD 10. Feb 2008 21:38

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?
 
hmm, also um meine Vorredner zusammenzufassen und eigenen Senf dazuzugeben:

Dein Websitescanner braucht eigentlich keinen Webserver. Da du ja einen Webseite auf Funktionalität überprüfen willst, brauchst du dir um die Dateierweiterung keine Sorgen zu machen - Sie muss entweder .html/.htm oder .php oder .asp sein. Das Problem ist, ganz einfach: PHP oder ASP Dateien lassen sich nur unter Verwendung eines passenden Parsers "lesen". Sollte die Dateierweiterung keine der hier genannten sein, ist die Seite ja auch für einen Browser nicht als Content-Page erkennbar - und wird dementsprechend auch nicht als solche bearbeitet. Also solltest du dir einen kleinen HTML-Parser schreiben der die erste Datei öffnet, und dann nach <a href sucht. So in der Art musst du die Datei durchgehen (ACHTUNG - relative Pfade müssen ergänzt werden!) und die Verweise jeweils in eine StringList oder so schreiben. Problem: Was sagt dir, ob die Seite "korrekt" oder "falsch" ist? Ein in perfekten HTML geschriebener 404.. Da musst du den Header auswerten. oder Wenn dein CMS sagt: Eintrag nicht gefunden? Du solltest dein Programm also speziell auf deine Wünsche anpassen.

>__> wollte eigentlich noch was sagen.. Ist mir grade entfallen. Wenn du noch Probleme hast, frag ;-)

Grüße, BliZZarD

hj-s 11. Feb 2008 07:18

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?
 
Hallo ThE_-_BliZZarD
Zitat:

Sie muss entweder .html/.htm oder .php oder .asp sein.
nun, so klar ist das nicht! Es kann auch z.B. *.cgi oder jede andere Dateinamneserweiterung sein, denn in der .htaccess lässt sich ja "alles" umbiegen. Also könnte man auch festlegen, dass ein PHP sich auch um *.txt Dateien kümmern soll. Denn die Namenserweiterung sagt ja noch garnichts darüber aus, was denn da drin steht....
Außerdem geht es ja nicht nur um HREF-Links (href=) sondern auch um alle anderen Links, also etwa (src=) und so weiter. Die letzteren will ich aber nicht ganz laden, sondern nur wissen, ob sie da sind. Dazu kann man gut den ResponseCode von TIdHTTP verwenden und falls es nicht 200 ist auch den RawHeaders.Text des gleichen Objekts auswerten. So kann man auch auf Umleitungen und so reagieren. Das heißt, dann auch die neuen Adresse als interner Link betrachten und alle anderen sich darunter befindenden Links auch, falls jemand seine Webseite auf mehrere Server verteilt haben sollte.
Zitat:

Du solltest dein Programm also speziell auf deine Wünsche anpassen.
Ja, natürlich. Schon allein dass ich so ein Programm am basteln bin liegt daran. Sonst könnte ich ja eines der fertigen (auch kostenlosen) Programme nutzen.
Schöne Grüße. :oops:

r2c2 11. Feb 2008 10:24

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?
 
Wenn du doch schon xampp kennst, wo ist dann das Problem? Daten in xampp/htdocs und Aufruf per Indy und http://localhost/url

mfg

Christian

hj-s 11. Feb 2008 15:41

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?
 
Hallo r2c2,
Zitat:

wo ist dann das Problem?
das Problem ist (war) da, wo mir noch nicht klar war, dass es für mich ein zu großer Aufwand wäre, wenn man ohne dass xampp (besser gesagt der Apache) läuft, die Dateien auf dem lokalen Recher durchtesten will, ehe man sie hochlädt, etwa mit Filezilla.
Aber von dieser Vorstellung habe ich mich (auch durch die Antworten von Euch) nun halbwegs verabschiedet.
Schöne Grüße. :oops:


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