109 votes

<script>Script pour obtenir le code de statut HTTP d'une liste d'URLs?</script>

J'ai une liste d'URL que je dois vérifier, pour voir si elles fonctionnent encore ou non. J'aimerais écrire un script bash qui le fasse pour moi.

Je n'ai besoin que du code d'état HTTP retourné, c'est-à-dire 200, 404, 500, etc. Rien de plus.

MODIFIER Notez qu'il y a un problème si la page indique "404 not found" mais renvoie un message 200 OK. Il s'agit d'un serveur web mal configuré, mais vous devrez peut-être tenir compte de ce cas.

Pour en savoir plus, consultez Vérifier si une URL renvoie vers une page contenant le texte "404"

4voto

colinross Points 1786

wget -S -i *file* vous permettra d'obtenir les en-têtes de chaque URL dans un fichier.

Filtrez à travers grep pour le code de statut spécifiquement.

2voto

Yura Loginov Points 141

J'ai trouvé un outil "webchk" écrit en Python. Renvoie un code d'état pour une liste d'URLs. https://pypi.org/project/webchk/

La sortie ressemble à ceci:

▶ webchk -i ./dxieu.txt | grep '200'
http://salesforce-case-status.dxi.eu/login ... 200 OK (0.108)
https://support.dxi.eu/hc/en-gb ... 200 OK (0.389)
https://support.dxi.eu/hc/en-gb ... 200 OK (0.401)

J'espère que cela vous aidera!

1voto

Ole Tange Points 4907

En raison de https://mywiki.wooledge.org/BashPitfalls#Non-atomic_writes_with_xargs_-P (la sortie des travaux parallèles dans xargs risque d'être mélangée), je préférerais utiliser GNU Parallel au lieu de xargs pour paralléliser:

cat url.lst |
  parallel -P0 -q curl -o /dev/null --silent --head --write-out '%{url_effective}: %{http_code}\n' > outfile

Dans ce cas particulier, il peut être sûr d'utiliser xargs car la sortie est très courte, donc le problème avec l'utilisation de xargs est plutôt que si quelqu'un modifie plus tard le code pour faire quelque chose de plus grand, cela ne sera plus sûr. Ou si quelqu'un lit cette question et pense qu'il peut remplacer curl par autre chose, alors cela peut aussi ne pas être sûr.

Exemple de url.lst:

https://fsfe.org
https://www.fsf.org/bulletin/2010/fall/gnu-parallel-a-design-for-life
https://www.fsf.org/blogs/community/who-actually-reads-the-code
https://publiccode.eu/

1voto

Rowy Points 21

En gardant à l'esprit que curl n'est pas toujours disponible (particulièrement dans les conteneurs), il y a des problèmes avec cette solution:

wget --server-response --spider --quiet "${url}" 2>&1 | awk 'NR==1{print $2}'

qui renverra un code de sortie de 0 même si l'URL n'existe pas.

Alternativement, voici une vérification raisonnable de santé du conteneur pour utiliser wget:

wget -S --spider -q -t 1 "${url}" 2>&1 | grep "200 OK" > /dev/null

Alors que cela ne vous donnera peut-être pas un statut exact, cela vous donnera au moins un code de sortie valide basé sur les réponses de santé (même avec des redirections sur le point final).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X