Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1306 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Comment tester une liste d'URLs en batch ou PS avec log ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment tester une liste d'URLs en batch ou PS avec log ?

n°2382111
UglyStuff
Posté le 19-04-2021 à 18:34:35  profilanswer
 

Bonsoir à toutes et à tous,  
 
Je dois tester pour un client une liste d'une grosse centaine d'URLs pour voir si les liens sont actifs, avec sortie vers un log ou un fichier txt (ou csv) récapitulatif, et je cherche à automatiser le truc parce que j'ai en gros une soixantaine d'UO depuis lesquelles je dois faire ce test, histoire d'être sûr que tous les utilisateurs pourront se connecter aux sites en question.  
 
J'ai trouvé quelques idées de batch ou de PowerShell ici ou là, mais rien qui me permette, et de tester les URLs, et de renvoyer leur statut HTML (200, 403, 404, etc...), et de faire ressortir tout ça sous forme de fichier txt, log ou csv.  
 
Idéalement, il faudrait que pour chaque URL testée, le code HTML renvoyé apparaisse en bout de ligne, mais que le script ne s'interrompe pas en cas d'erreur (404 ou autre).  
 
Je maîtrise un tout petit peu batch, très peu PowerShell, mais j'ai envie d'apprendre. En revanche, je suis un peu pris par le temps pour ce job...  :ange:  
 
J'attends avec impatience de vous lire !

mood
Publicité
Posté le 19-04-2021 à 18:34:35  profilanswer
 

n°2382119
rat de com​bat
attention rongeur méchant!
Posté le 19-04-2021 à 20:27:07  profilanswer
 

Python3, soit en natif soit en s'appuyant sur wget/curl. A voir ce qui est plus facile à coder.

n°2382124
kyurakushu​nsui
Posté le 19-04-2021 à 22:08:05  profilanswer
 

Bonjour,
 
Voilà une solution en batch basée sur curl :
 

Code :
  1. @echo off
  2. mode con cols=160
  3. setlocal enabledelayedexpansion
  4. if not exist "liste_url.txt" (exit /b 1)
  5. for /f "delims=" %%E in (liste_url.txt) do (
  6. set "result="
  7. for /f "delims=" %%A in ('curl --max-time 30 -I -s -S -k "%%~E" 2^>^&1') do if not defined result (set "result=%%A" )
  8. echo. & echo.%%~E ##### !result! #####
  9. )
  10. echo. & pause
  11. exit


 
Le fichier liste_url.txt doit se trouver dans le même dossier que le script.
 
Après avoir testé si tout fonctionne comme tu le souhaites, tu auras juste à ajouter une redirection vers un fichier texte ou un fichier .csv

Message cité 1 fois
Message édité par kyurakushunsui le 19-04-2021 à 22:18:10
n°2382126
UglyStuff
Posté le 19-04-2021 à 22:35:55  profilanswer
 

kyurakushunsui a écrit :

Bonjour,
 
Voilà une solution en batch basée sur curl :
 

Code :
  1. @echo off
  2. mode con cols=160
  3. setlocal enabledelayedexpansion
  4. if not exist "liste_url.txt" (exit /b 1)
  5. for /f "delims=" %%E in (liste_url.txt) do (
  6. set "result="
  7. for /f "delims=" %%A in ('curl --max-time 30 -I -s -S -k "%%~E" 2^>^&1') do if not defined result (set "result=%%A" )
  8. echo. & echo.%%~E ##### !result! #####
  9. )
  10. echo. & pause
  11. exit


 
Le fichier liste_url.txt doit se trouver dans le même dossier que le script.
 
Après avoir testé si tout fonctionne comme tu le souhaites, tu auras juste à ajouter une redirection vers un fichier texte ou un fichier .csv


 
Merci, je vais tester ça demain !

n°2382137
UglyStuff
Posté le 20-04-2021 à 06:44:17  profilanswer
 

UglyStuff a écrit :


 
Merci, je vais tester ça demain !


 
Hello !  
 
Bon, je teste en ce moment-même, mais j'ai un problème quand il s'agit d'exporter l'output vers un fichier que j'ai appelé "results.txt" : que je mette "> results.txt" ou ">> results.txt" (après avoir manuellement créé le fichier à la racine du dossier d'où je lance le script), le fichier "results.txt" reste vierge...  
 
(Je précise que je ne mets pas de guillemets autour du nom dans le script.)  
 
Comment faire pour exporter le résultat du cURL ?

n°2382146
kyurakushu​nsui
Posté le 20-04-2021 à 09:23:20  profilanswer
 

L'url se trouve dans la variable %%E, le résultat de curl se trouve dans la variable %%A puis dans la variable !result!
 
Il suffit donc de rediriger comme ceci :

Code :
  1. @echo off
  2. mode con cols=160
  3. setlocal enabledelayedexpansion
  4. if not exist "liste_url.txt" (exit /b 1)
  5. type nul >results.txt
  6. for /f "delims=" %%E in (liste_url.txt) do (
  7. set "result="
  8. for /f "delims=" %%A in ('curl --max-time 30 -I -s -S -k "%%~E" 2^>^&1') do if not defined result (set "result=%%A" )
  9. echo. & echo.%%~E ##### !result! #####
  10. echo.%%~E ##### !result! #####>>results.txt
  11. )
  12. echo. & pause
  13. exit


 
Pas besoin de créer à la main le fichier results.txt il se crée tout seul.
 
Si jamais tu as besoin de tester le certificat SSL/TLS associé au domaine de l'url, tu peux supprimer l'option -k de curl, ainsi il te signalera par exemple l'utilisation d'un certificat auto signé mais en contrepartie tu n'auras plus le status HTML du site.

Message cité 1 fois
Message édité par kyurakushunsui le 20-04-2021 à 09:36:18
n°2382197
UglyStuff
Posté le 20-04-2021 à 18:24:26  profilanswer
 

kyurakushunsui a écrit :

L'url se trouve dans la variable %%E, le résultat de curl se trouve dans la variable %%A puis dans la variable !result!
 
Il suffit donc de rediriger comme ceci :

Code :
  1. @echo off
  2. mode con cols=160
  3. setlocal enabledelayedexpansion
  4. if not exist "liste_url.txt" (exit /b 1)
  5. type nul >results.txt
  6. for /f "delims=" %%E in (liste_url.txt) do (
  7. set "result="
  8. for /f "delims=" %%A in ('curl --max-time 30 -I -s -S -k "%%~E" 2^>^&1') do if not defined result (set "result=%%A" )
  9. echo. & echo.%%~E ##### !result! #####
  10. echo.%%~E ##### !result! #####>>results.txt
  11. )
  12. echo. & pause
  13. exit


 
Pas besoin de créer à la main le fichier results.txt il se crée tout seul.
 
Si jamais tu as besoin de tester le certificat SSL/TLS associé au domaine de l'url, tu peux supprimer l'option -k de curl, ainsi il te signalera par exemple l'utilisation d'un certificat auto signé mais en contrepartie tu n'auras plus le status HTML du site.


 
Je viens juste de lire ta réponse, mais entre temps, j'avais un peu modifié le script en y ajoutant un ">results.txt" à la fin et en supprimant "echo. & pause" et "exit".  
 
Ça marche très bien... Quand cURL est installé sur les machines... On a un parc mixte W10 et W7, et sur ces dernières, cURL n'est pas installé, et l'installer au cas par cas serait trop compliqué.  
 
Va falloir que je trouve une parade à ça demain. Y'a bien un cURL portable sur GitHub, je crois, mais j'aimerais éviter de soulever quelques drapeaux chez les admins...  :D

n°2382252
kyurakushu​nsui
Posté le 20-04-2021 à 21:10:59  profilanswer
 

Dommage j'avais fait il y a quelques semaines un script pour justement telecharger et decompresser la derniere version de curl automatiquement, malheureusement mon ssd intel vient de me lacher cet apres-midi apres 7 ans de service. Je re-ecrirai le script quand j'aurai un windows sous la main (normalement ce week-end si tout va bien)

n°2382263
UglyStuff
Posté le 20-04-2021 à 22:03:04  profilanswer
 

kyurakushunsui a écrit :

Dommage j'avais fait il y a quelques semaines un script pour justement telecharger et decompresser la derniere version de curl automatiquement, malheureusement mon ssd intel vient de me lacher cet apres-midi apres 7 ans de service. Je re-ecrirai le script quand j'aurai un windows sous la main (normalement ce week-end si tout va bien)


 
Je serais preneur, même si je pense que le proxy va probablement bloquer ce genre de requête. C'est vraiment dommage que cURL ne soit pas installé de base dans W7.

n°2382384
rufo
Pas me confondre avec Lycos!
Posté le 21-04-2021 à 22:59:26  profilanswer
 

En utilisant AutoIt et le composant soit internet explorer soit le composant network (de mémoire), doit y avoir moyen de faire la même chose je pense.
Sinon, via du PHP avec un environnement uWamp portable qui intègre cUrl. Même principe que proposé : un fichier txt qui contient les urls à tester, une boucle for et le résultat dans un autre fichier txt.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 21-04-2021 à 22:59:26  profilanswer
 

n°2382399
UglyStuff
Posté le 22-04-2021 à 06:57:31  profilanswer
 

rufo a écrit :

En utilisant AutoIt et le composant soit internet explorer soit le composant network (de mémoire), doit y avoir moyen de faire la même chose je pense.
Sinon, via du PHP avec un environnement uWamp portable qui intègre cUrl. Même principe que proposé : un fichier txt qui contient les urls à tester, une boucle for et le résultat dans un autre fichier txt.


Merci pour l'info, je vais regarder tout ça. Je ne suis pas très fort en PHP, mais je vais voir s'il y a moyen de...

n°2382631
kyurakushu​nsui
Posté le 24-04-2021 à 00:36:36  profilanswer
 

Salut j'ai enfin pu réparer mon pc, si tu es toujours intéressé j'ai repris le script de mon précédent message mais en incorporant curl à l'intérieur, je pense que ce sera plus pratique pour toi plutôt que de devoir télécharger curl sur chaque poste windows 7.
Le script est trop long pour être posté sur le forum, je te donne un lien de téléchargement : https://we.tl/t-vZZ7NxqTnx
 
Si tu as des questions n'hésite pas.

n°2382640
UglyStuff
Posté le 24-04-2021 à 08:23:20  profilanswer
 

kyurakushunsui a écrit :

Salut j'ai enfin pu réparer mon pc, si tu es toujours intéressé j'ai repris le script de mon précédent message mais en incorporant curl à l'intérieur, je pense que ce sera plus pratique pour toi plutôt que de devoir télécharger curl sur chaque poste windows 7.
Le script est trop long pour être posté sur le forum, je te donne un lien de téléchargement : https://we.tl/t-vZZ7NxqTnx
 
Si tu as des questions n'hésite pas.


Salut !  
 
J'ai récupéré le script, je testerai ça au boulot lundi et je te dirai ce qu'il en retourne. Merci et bon week-end !

n°2382645
kyurakushu​nsui
Posté le 24-04-2021 à 09:01:34  profilanswer
 

J'ai oublié de préciser que c'est curl en version 64bits que j'ai incorporé, je vais préparer une version 32 bits ça pourrait être utile.  

n°2382652
kyurakushu​nsui
Posté le 24-04-2021 à 10:06:17  profilanswer
 

Voilà j'ai terminé, je mets les nouveaux liens :
 
- version 32 bits : https://we.tl/t-uFiv72qrih
 
- version 64 bits : https://we.tl/t-q0B0ouC3FP
 
Pour éviter d'éventuels problèmes de compatibilité, je te recommande la version 32 bits.

Message cité 1 fois
Message édité par kyurakushunsui le 24-04-2021 à 10:09:58
n°2382662
gilou
Modérateur
Modzilla
Posté le 24-04-2021 à 11:37:41  profilanswer
 

Perso, je fais la même chose via un script bash (qui appelle Curl), dans un shell msys si je suis sur une bécane windows
J'ai des republications de tous les documents d'un certain type sur les 3 dernières années (entre 5000 et 6000 documents), le code de ma republication envoie les fichiers a republier dans un système qui va les publier sur plusieurs sites différents (en plus de générer plein d'indexation pour la recherche sur ces sites).
Pour voir si tous mes documents sont bien arrivés (j'ai une correspondance nom du fichier source, nom du fichier sur tel site, ça aide) un coup de curl -I pour vérifier que chaque document est la, en ne demandant que le header, avec détection des erreurs renvoyées par le serveur pour log.
Le script bash permet de m'abstraire de l’environnement win/lin
 
A+,


Message édité par gilou le 24-04-2021 à 11:45:05

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2382680
UglyStuff
Posté le 24-04-2021 à 18:06:39  profilanswer
 

kyurakushunsui a écrit :

Voilà j'ai terminé, je mets les nouveaux liens :
 
- version 32 bits : https://we.tl/t-uFiv72qrih
 
- version 64 bits : https://we.tl/t-q0B0ouC3FP
 
Pour éviter d'éventuels problèmes de compatibilité, je te recommande la version 32 bits.


Merci pour tous tes efforts ! Toutes les bécanes du parc sont en 64-bit, je pense, mais je testerai les deux au cas où. Encore merci, et profite de ce qu'il te reste de week-end !  :D  :bounce:

n°2382771
UglyStuff
Posté le 26-04-2021 à 18:41:31  profilanswer
 

rorosk a écrit :

J'arrive 10 ans après la bataille, mais il y a tout ce qu'il faut en PowerShell Core (donc version 7, pas la version 5 car le commutateur SkipHttpErrorCheck n'existe pas) :
 

gc ".\listes.txt" | % { [PSCustomObject]@{ URL = $_; Status = try { (Invoke-WebRequest $_ -SkipHttpErrorCheck).StatusCode } catch { $_ } } } | ConvertTo-Csv -Delimiter ";"


 
Edit : listes.txt : une URL par ligne.


Oui, ça fonctionne sur des postes sous W10, mais pas sur tous ceux encore en W7, et il y en a pas mal. J'avais testé un hybride batch-PS qui faisait très bien le job, en effet, mais uniquement sur les postes en W10, du coup j'ai dû changer mon fusil d'épaule.

n°2382835
Je@nb
Kindly give dime
Posté le 27-04-2021 à 12:00:43  profilanswer
 

Un truc comme ça devrait le faire en Windows PS (pas core) :

Code :
  1. function Test-Url {
  2.     param (
  3.         [System.Uri]$Url,
  4.         [switch]$NoFollowRedirections
  5.     )
  6.     try {
  7.         if ($NoFollowRedirections) {
  8.             $r = (Invoke-WebRequest -Uri $Url -Method HEAD -MaximumRedirection 0 -ErrorAction Ignore -UseBasicParsing )
  9.         }
  10.         else {
  11.             $r = (Invoke-WebRequest -Uri $Url -Method HEAD -ErrorAction Stop -UseBasicParsing )
  12.         }
  13.         $r.StatusCode
  14.     }
  15.     catch [System.Net.WebException] {
  16.         if ($null -ne $_.Exception.Response) {
  17.             $_.Exception.Response.StatusCode.value__
  18.         }
  19.         else {
  20.             $_.Exception.Status
  21.         }
  22.     }
  23.     catch {
  24.         "ERROR"
  25.     }
  26. }
  27. gc '.\liste.txt' |% { [PSCustomObject]@{ URL = $_; Status = (Test-Url $_) } | ConvertTo-Csv -Delimiter ";"

n°2382953
UglyStuff
Posté le 28-04-2021 à 07:05:28  profilanswer
 

Je@nb a écrit :

Un truc comme ça devrait le faire en Windows PS (pas core) :

Code :
  1. function Test-Url {
  2.     param (
  3.         [System.Uri]$Url,
  4.         [switch]$NoFollowRedirections
  5.     )
  6.     try {
  7.         if ($NoFollowRedirections) {
  8.             $r = (Invoke-WebRequest -Uri $Url -Method HEAD -MaximumRedirection 0 -ErrorAction Ignore -UseBasicParsing )
  9.         }
  10.         else {
  11.             $r = (Invoke-WebRequest -Uri $Url -Method HEAD -ErrorAction Stop -UseBasicParsing )
  12.         }
  13.         $r.StatusCode
  14.     }
  15.     catch [System.Net.WebException] {
  16.         if ($null -ne $_.Exception.Response) {
  17.             $_.Exception.Response.StatusCode.value__
  18.         }
  19.         else {
  20.             $_.Exception.Status
  21.         }
  22.     }
  23.     catch {
  24.         "ERROR"
  25.     }
  26. }
  27. gc '.\liste.txt' |% { [PSCustomObject]@{ URL = $_; Status = (Test-Url $_) } | ConvertTo-Csv -Delimiter ";"



 
Je vais tester ça ce matin, je vous dis ce soir. Merci !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Comment tester une liste d'URLs en batch ou PS avec log ?

 

Sujets relatifs
Aide Batch copy + rename (plusieurs dossiers a traiter en même temps)Batch dont la modification ne fonctionne que si je copie le fichier
fichier batch pour relier des fichiers videosBatch windows avec accent
[RÉSOLU] Envoyer une liste de noms de fichiers vers un exécutableCréer une liste déroulante
Choisir une valeur par défaut sur une liste de choixScript Batch
Récupérer 2 élément à part dans des variable à partir d'un liste.[Batch][W10] Sortie std ne fonctionne pas sous task sched
Plus de sujets relatifs à : Comment tester une liste d'URLs en batch ou PS avec log ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR