Halihallo
Doch wie mache ich es am besten, denn schließlich soll es perfekt - nah, sagen wir besser "sehr gut" werden.
sehr gut ist oft sogar besser als perfekt, man denke an die 80/20-Lösung.
Eine syntaktische Überprüfung ist schlecht, da erfunde URLs durchaus zulassen werden könnten. Bsp: http://mickey-maus-ist-doof.disney.de - wie wir alle wissen, ist Mickey Maus nicht doof und mit extrem hoher Wahrscheinlichkeit existiert diese URL nicht. --> Schlechter Weg...
OK. Was ist, wenn ich in deinem Forum posten will, eine Bild-URL hinterlege, welches auf ein _noch nicht_ upgeloadetes Bild zeigt??? - Nun gut, selber schuld...
Besserer Weg: Ich überprüfe nicht die syntaktische Korrektheit der URL, sondern die URL selbst. Sprich: Ich rufe dieses Dokument auf und überprüfe den Inhalt
Braucht aber _wesentlich_ mehr Performance! - Aber wenn du nicht gleich 100'000 Einträge/Stunde abarbeiten musst, dürfte's gut gehn...
Dies ist an sich schon ziemlich gut, da ich so mittels einfacher if-Abfrage checken kann, ob Inhalt von dieser URL übertragen wurde. Das Problem ist nur, dass das komplette Dokument ja übertragen wird, was an sich eigentlich nicht nötig wäre.
Stimmt. Schluckt nur RAM-Speicher, Performance und Netzwerkressourcen.
Hat einer von Euch eine bessere und eventuell schon verwirklichte Idee, z.B. nur die Header-Infos auszuwerten?
Nun, du sagst es ja schon fast: Nur die Header-Infos lesen. Das HTTP-Protokol unterstützt die Methode HEAD (neben dem GET, welches bei LWP::Simple verwendet wird). Diese Methode liefert dir nur die Header-infos, also 200 OK bzw. 403 Document not found... etc.
perldoc HTTP::Request::Common
perldoc LWP::UserAgent
...
jetzt klar?
Anderer Lösungsansatz:
Vielleicht reicht's für deine Zwecke auch, einfach zu überprüfen, ob die Domain existiert (dann geht dein Mickymouse beispiel nicht, dennoch kann ich mein Bild auch noch später hochladen...).
Dann reicht ein simpler ping ( perldoc IO::Socket::INet ), der belastet die Performance noch weniger...
Viele Grüsse
Philipp