Pour vérifier si un lien est valide (http ou ftp) il faut tenter de se connecter à cette adresse pour voir ce que répond le serveur (erreur 404, 500, ..)
Il y a 2 façons de le faire :
1) soit en créant soi même les connexions au serveur HTTP en utilisant les sockets
2) soit un utilisant les modules Perl prévus à cet effet.
Voici un exemple en utilisant les modules Perl (LWP et HTTP) :
#!/usr/bin/perl
require LWP::UserAgent;
require HTTP::Request;
print "Content-type: text/html\n\n";
# url a vérifier
$url = "http://www.scripts-fr.com/";
$etat = &check_url ($url);
if ($etat eq "ok")
{ print "Url ok : $etat";
}
else
{ print "$url KO : $etat";
}
sub check_url
{ my ($url);
my ($ua);
$url = $_[0];
# crée un user agent
$ua = new LWP::UserAgent;
# défini la signature du browser
$ua->agent("LinkChecker (http://scripts-fr.com/)");
$ua->timeout(15);
$ua->max_size(300); # prends 300 bytes
# effectue la requete
$request = new HTTP::Request GET => $url;
Ce script va se connecter à l'url spécifiée et va regarder quelle est la réponse du serveur. Si il n'y a pas d'erreur (que la page existe, que le serveur est accessible, ...) le script va afficher "Url ok".
La vérification de l'url en elle même est réalisée par la fonction check_url qui crée une sorte de navigateur et se connecte via une requête GET à l'url à vérifier.
Si il y a une erreur, on renvoie le code d'erreur ($response->code).