AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdHTTP (Indy 10) Methode für lokale Dateien?
Thema durchsuchen
Ansicht
Themen-Optionen

TIdHTTP (Indy 10) Methode für lokale Dateien?

Ein Thema von hj-s · begonnen am 10. Feb 2008 · letzter Beitrag vom 11. Feb 2008
Antwort Antwort
hj-s

Registriert seit: 30. Sep 2006
10 Beiträge
 
#1

TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 10. Feb 2008, 08:28
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 10. Feb 2008, 12:45
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
  Mit Zitat antworten Zitat
hj-s

Registriert seit: 30. Sep 2006
10 Beiträge
 
#3

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 10. Feb 2008, 16:35
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 10. Feb 2008, 17:26
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.
  Mit Zitat antworten Zitat
ThE_-_BliZZarD

Registriert seit: 15. Sep 2006
Ort: Wiesbaden/Hessen
89 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 10. Feb 2008, 21:38
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
MSVC2008 (C/C++ with QT), Delphi RAD 2010, Flash CS5 (FDT/Adobe), Java EE (Eclipse), PHP5
Antwortsprachen: Deutsch, Englisch, Französisch, Japanisch
  Mit Zitat antworten Zitat
hj-s

Registriert seit: 30. Sep 2006
10 Beiträge
 
#6

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 11. Feb 2008, 07:18
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.
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#7

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 11. Feb 2008, 10:24
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
hj-s

Registriert seit: 30. Sep 2006
10 Beiträge
 
#8

Re: TIdHTTP (Indy 10) Methode für lokale Dateien?

  Alt 11. Feb 2008, 15:41
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.
  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 04:16 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