J’écris cet article à la vitesse de la lumière suite à une question que Sebastien Billard a posé sur twitter mercredi dernier et qui demandait comment obtenir – rapidement – le HTTP status code (comprenez par la le code que renvoie le serveur lorsque vous interrogez un site ou une page).
Je vais donc vous montrer comment effectuer cela en une simple ligne de commande sous linux, sans limite de taille de fichier et bien sur dans un temps bien plus que raisonnable.
Bref rappel sur les HTTP Status Code
Avant de paster la ligne de commande, juste un tout petit rappel sur ce que sont les HTTP Status Code.
Comme dit dans l’intro, ce sont les codes renvoyés par le serveur web lors de l’interrogation de celui-ci. Les codes les plus connus sont :
- 200 : La requête du client a été reçue, comprise et acceptée par le serveur.
- 301 : L’url demandée a été redirigée definitivement vers une autre url
- 302 : L’url demandee a été redirigée temporairement vers une autre url
- 403 : Hop hop hop, pas le droit de fourrer son nez ici
- 404 : La ressource demandée n’est pas/plus disponible
- 500 : La y a un mec qui fait mumuse avec le .htaccess ou la conf de son apache et qui a tout pété 😉
Pour récapituler :
– Les codes de type 2xx indiquent que tout s’est bien passé.
– Les codes de type 3xx sont utilisés pour les redirections.
– Les codes de type 4xx indiquent que le client effectue une requete « erronée ».
– Les codes de type 5xx indiquent qu’il faut changer d’admin sys ou arrêter de jouer avec le .htaccess.
C’est bon, on s’en fout de tout ça, balance nous le script maintenant !!
Ok du calme, donc la ligne de commande en question :
awk '{printf "%s;", $1;system("lynx -dump -head " $1 "| grep -e HTTP")}' url_list > output_HTTP.csv
Ceux qui me follow sur twitter ont peut-être vu cette commande awk dans ma timeline.
Pour que cela fonctionne il vous faut :
– lynx d’installé => [Debian] apt-get install lynx, [Gentoo] emerge lynx, [Fedora] yum install lynx …)
– Votre fichier contenant toutes les urls dont vous souhaitez connaitre le HTTP status code (dans l’exemple c’est url_list). Le fichier doit comporter une url par ligne.
C’est tout, cette commande va vous pondre un fichier csv avec http://example.com;code_retour (dans notre exemple, il s’agit de output_HTTP.csv). Vous pourrez alors après avec votre tableur préféré effectuer un classement sur la 2eme colonne.
Pour aller un peu plus loin :
– La liste complete de TOUS les HTTP Status Code.
– Tous les champs d’un HEADER HTTP respectant le standard HTTP/1.1
10 réponses sur « Obtenir le HTTP Status Code avec AWK »
Nice tips 😉
je donne une version PHP pour ceux qui veulent scripter ça dans une admin (par exemple):
Pour extraire le status renvoyé par la page, à vos print_r && explode 🙂
Lors de notre discussion sur twitter, je n’avais pas réussi à mettre la main sur mon snippet à base de curl. Le voici :
wget –delete-after site.com 2>&1|egrep « HTTP|Length|saved » | head -1 | sed s/ »HTTP request sent, awaiting response… « //
Merci pour partager vos connaissance avec nous. Et un autre merci pour Zizounnette pour ce code utile.
Peut être ajouter le « -e Location » si on veut la destination de la redirection
Très bon article
Merci @Zizounnette pour la version PHP (qui m’est beaucoup plus utile ;))
Je ne connaissais pas du tout les HTTP Status Code. Même si ton article m’aide un peu plus à comprendre ce système, je ne vois pas l’intérêt…
@spamco_qui_connait_pas_les_http_code: à ton avis à quoi ça peut servir de détecter un code erreur 404(lien brisé), d’un 200 (page valide), d’une 301(redirection permanente) ? A TON AVIS !!! (réflexion intense demandée) :p
Un bon rappel, toujours utile à savoir, surtout dans notre metier.
C’est vrai que l’article est sympa, mais lorsque j’ai créé mon outil perso pour connaître les modifications qui étaient effectuées sur les sites de mes clients ( oui, à mon grand regret, j’ai des clients qui changent leur titles / contents ou même hébergements sans même m’en parler ) par une méthode de pinging, j’utilisais effectivement la méthode PHP pour connaître le statut du site internet (qui est, je trouve, beaucoup plus simple d’utilisation).