Aller au contenu

Contrôler des liens internet


Messages recommandés

Bien le bonjour,

J'aurais une petit question.

J'ai un fichier *.txt avec comme nom, exemple MesLiens.txt
A l'intérieur de se fichier MesLiens.txt j'ai plus de 200 liens internet.

Ma question est la suivante

Comment puis-je contrôler les liens présent dans se fichier, afin de savoir quel liens est invalide.

Pourquoi cette question ?

Afin de gagner du temps
Afin d'éviter de faire un à un la vérification de lien 
Afin que ceux ou celles qui se pose la même question et leurs réponse

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Un peu bash. Après il peut ne pas fonctionner :siffle: par exemple, Amazon me renvoyait que le lien n'existe pas

#!/bin/bash

regex='^(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]\.[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]$'

while IFS="" read -r p || [ -n "$p" ]
do
  if [[ $p =~ $regex ]] then
#   if curl --head --silent $p > /dev/null 2>&1; then # test 1
#   if wget --spider $p > /dev/null 2>&1; then        # test 2

    response=$(curl --connect-timeout 10 --max-time 15 --silent --head --write-out "%{http_code}" --output /dev/null "$p") # test 3 with timeout

    if [[ $response -eq 200 ]]; then
      printf '%s\n' " OK: $p" # link exists
    else
      printf '%s\n' "NOK: $p" # link doesn't exist or isn't reachable
    fi
  else
    printf '%s\n' "XXX: $p" # not a valid URL
  fi
done < MesLiens.txt
Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, foetus a dit :

Un peu bash. Après il peut ne pas fonctionner :siffle: par exemple, Amazon me renvoyait que le lien n'existe pas

#!/bin/bash

regex='^(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]\.[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]$'

while IFS="" read -r p || [ -n "$p" ]
do

  if [[ $p =~ $regex ]] then
#   if curl --head --silent $p > /dev/null 2>&1; then # test 1
#   if wget --spider $p > /dev/null 2>&1; then        # test 2

    response=$(curl --connect-timeout 10 --max-time 15 --silent --head --write-out "%{http_code}" --output /dev/null "$p") # test 3 with timeout

    if [[ $response -eq 200 ]]; then
      printf '%s\n' " OK: $p" # link exists
    else
      printf '%s\n' "NOK: $p" # link doesn't exist or isn't reachable
    fi
  else
    printf '%s\n' "XXX: $p" # not a valid URL
  fi
done < MesLiens.txt

Bonsoir,

Merci de ta réponse, il serait bien de :
- D
onné la source de se bash
- D'expliquer les démarches à faire (car sa pourrait servir à d'autre personnes intéresser)
- De proposer un truc qui fonctionne, car rien qu'en lisant " Après il peut ne pas fonctionner " sa donne pas trop envie d'essayer.

Bonne soirée.

Lien vers le commentaire
Partager sur d’autres sites

Il y a 17 heures, Scorpio a dit :

- Donné la source de se bash

  1. Looping through the content of a file in Bash, stackoverflow
  2. Check for valid link (URL), stackoverflow
  3. How to Verify if a URL Is Valid From the Linux Shell, baeldung.com

Donc tout avec 1 recherche Internet :siffle:

Et au passage j'ai oublié de dire (si tu regardes le lien) "while IFS="" read -r p || [ -n "$p" ]; do" est assez compliqué parce qu'on peut faire seulement "while read p; do". Mais cela permet de ne pas supprimer les blancs inutiles et de ne pas faire 2-3 interprétations.

Est-ce que ton fichier MesLiens.txt est bien formé ?

 

Il y a 17 heures, Scorpio a dit :

- D'expliquer les démarches à faire (car sa pourrait servir à d'autre personnes intéresser)

Rien à n'expliquer :mrgreen: : c'est du bash testé sous Cygwin (Windows 8.1) (<- tu crées 1 fichier .sh, tu chmod +x et tu l'exécutes)
Tu n'as pas dit sous quel système d'exploitation tu es et comment tu voulais "ta solution" ?  (exécutable, logiciel, programme C, bash, ... PowerShell, vbscript, ...)

Sinon tu utilises 1 logiciel comme HTTrack et tu copies colles tes liens dedans.

 

Il y a 17 heures, Scorpio a dit :

- De proposer un truc qui fonctionne, car rien qu'en lisant " Après il peut ne pas fonctionner " sa donne pas trop envie d'essayer.

Je pense que cela dépend de la politique du site : si tu télécharges la page en entier et tu "testes la page", tu peux savoir si le lien est fonctionnel.
Par exemple, 1 lien peut être 1 page vide avec juste "session expired" (c'est 1 cas précis et spécifique, mais il faut tester la page)
Mais cela peut être long (par exemple attendre 1 timeout si le site n'existe pas)

Mais certains sites ont mis en place des politiques de ne pas répondre à toutes les requêtes (le test 1 et 3 envoie 1 requête HTTP HEAD)
Et donc si le script dit "le lien existe" c'est 100% sûr, mais si il dit "le lien n'existe pas" bien on ne sait jamais.

  • Aime 1
  • Merci 1
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...