Christoph Zurnieden: Linkgültigkeit prüfen

Beitrag lesen

Hi,

also: eigentlich wollte ich ja nur wissen ...

ich bin dabei ein Programm zu schreiben, das mitunter die Links einer ausgewählten Webseite überprüft.

... warum Du die Links _mitunter_ prüfst.

Aber um darauf eine Antwort zu bekommen, muß ich wohl erstmal ran, was? ;-)

Ich weiß es gibt genug tools im Netz, die das hervorragend machen, aber ich wollte bzw. sollte diese Funktionalität auch in meinem Prgogramm haben.

Nun, falls ich Dich nicht gerade mißverstanden habe, ist das auch schneller selbst geschrieben, als ein Drittanbieter angepaßt.

Nun habe ich jetzt das Problem, dass ich nicht so recht weiß wie ich es anstellen soll. Zum Beispiel weiß ich noch nicht wie ich alle Links (Standard-Links, Bilder als Links, E-mail-Verknüpfungen, Anker) einer Webseite finden kann?

Du möchtest also nur das Element 'a' benutzen? Der Link darin ist im Attribut 'href'. (ob der in Anführungsstrichen steht und in welchen und ob da Leerzeichen vorkommen ist zu überprüfen).
Pech hast Du natürlich, wenn da Javascript drin steht.

Oder wie kann ich die Links auf ihre Gültigkeit überprüfen?

("oder"?)
Die einfachste Methode Links auf Gültigkeit zu überprüfen ist natürlich sie zu benutzen.

Ich programmiere in Java.

Das soll Dir nicht zum Nachteil angerechnet werden.
Aber nur ausnahmsweise! >;->

Die Daten (Quellcode) einer Html-Seite auszulesen, ist kein Problem aber die Links abzufragen(http://.../bla.com, ftp://ftp.bla.de, gopher://ftp.std.com/1, telnet://locis.loc.gov, usw.) ist nicht so einfach...

Das verstehe ich nicht so ganz. Du hast Deinen Parser schon so weit, das er die Links findet und Du benötigst "nur" noch das Stück der jeweiligen Protokolle, das den Handshake bis zur evt Fehlermeldung durchführt?
HTTP ist natürlich einfach:
"GET /index.html HTTP/1.0" (im Fehlerfall dann natürlich noch einmal mit HTTP/1.1, aber sollte mich wundern)
FTP ist etwas komplexer (aber eigentlich auch nur _mehr_ zu tun, nicht _schwieriger_ zu implementieren), siehe RFC 959
GOPHER (ja, das wird wirklich noch benutzt! Man kann's kaum glauben ;-): RFC 1436
TELNET ist in RFC 854/855. Aber das ist ganz simpel, selbst wenn Du Dich zwecks Überprüfung einloggen willst.

Allerdings in Summe doch recht viel. Eine kurze Suche bei Google, ob es sowas zumindest halbfertig gibt würde ich doch investieren. Java ist relativ alt und ich wäre erstaunt, wenn es für die gängigen Protokolle keine entspr, Libs gibt, die den Handshake für Dich erledigen, sodaß Du nur noch die Antwort auf Fehler parsen mußt (auch Timeout ist hier ein Fehler), wenn die Lib nicht schon so nett ist.

Die Sache hat auch noch einen prinzipiellen Haken. Der ist Dir wahrscheinlich zwar egal, aber trotzdem:
Du prüfst hier darauf, das es "keinen Fehler" gibt, das ist normalerweise tödlich. Gut zu erkennen an der Negation "keine" in der Aufgabenstellung. Nun sind aber die Fehler in den Protokollen bereits sauber definiert inklusive der Zeitspanne, in der sie auftreten können. Die Fehlermeldungen, nicht die Fehler! Die Aufgabe "keine Fehler" ist also tatsächlich lösbar. Jedoch mit dem Haken, das Du nicht weißt, welche Daten sich hinter "keine Fehler" verbergen.
Das kann die verlangte Seite mit dem Strickmuster sein, oder auch ein Redirect/Austausch der Seite auf/gegen Goatse/Tub-girl.

so short

Christoph Zurnieden