Catégories
BASH

Obtenir le HTTP Status Code avec AWK

http status code

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):

$info = @get_headers($url_distante);
if (!eregi('404',$info[0])) {
//url valide
}

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 :

while read URL; do echo "$URL;`curl -s -w "n%{http_code}n" $URL | tail -n1`"; done > output_HTTP.csv

wget –delete-after site.com 2>&1|egrep « HTTP|Length|saved » | head -1 | sed s/ »HTTP request sent, awaiting response… « //

Peut être ajouter le « -e Location » si on veut la destination de la redirection

@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

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).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *