Aller au contenu

Featured Replies

Posté(e)

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

Posté(e)

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
Posté(e)
  • Auteur
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.

Posté(e)
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.

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…