Aller au contenu

Messages recommandés

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

  • Aime 1
  • Merci 1

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