1

Uniformisation de la vérification des liens

This commit is contained in:
2025-11-28 23:43:07 +01:00
parent 5e846aa4b4
commit 0260c1ab4e
7 changed files with 2145 additions and 1157 deletions

View File

@@ -15,29 +15,14 @@ Je le fais par plaisir du travail bien fait et par respect pour mes visiteurs, m
## Méthodologie
J'ai créé un script exploitant [cURL](https://curl.se/docs/) avec les paramètres suivants :
Le script utilise désormais un fetch HTTP maison (basé sur [`undici`](https://github.com/nodejs/undici)) qui :
```javascript
const args = [
"--silent",
"--location",
"--fail",
"--max-time",
`${REQUEST_TIMEOUT_SECONDS}`,
"--output",
"/dev/null",
"--write-out",
"%{http_code}",
"--user-agent",
DEFAULT_USER_AGENT,
"--request",
method,
url,
];
```
`DEFAULT_USER_AGENT` est un UA valide et régulièrement mis à jour.
Je fais une première requête avec la méthode [`HEAD`](https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Methods/HEAD), et si cette requête échoue, j'en envoie une autre avec la méthode `GET`, après un délais de 5s.
- génère un _user-agent_ réaliste à chaque exécution (bibliothèque `user-agents`)
- envoie d'abord une requête [`HEAD`](https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Methods/HEAD) puis, en cas d'échec ou de code ≥ 400, une requête `GET` après un délai de 5s
- suit les redirections manuellement (jusqu'à 5 sauts) et abandonne au-delà
- applique un _timeout_ de 5 s par requête
- envoie des en-têtes classiques d'un navigateur (`Accept`, `Accept-Language`)
- n'enregistre pas de cookies
Trois cas de figure se présentent à ce stade.
@@ -91,9 +76,9 @@ Les requêtes ayant abouti à un _timeout_ ne sont pas renouvelées avant 1 sema
### Autres cas
Il arrive que cURL me renvoie une erreur HTTP 0 (qui n'existe pas réellement).
L'examen des journaux détaillés de ces requêtes m'apprend qu'en général (mais pas toujours), le problème est essentiellement lié aux certificats du serveur (obsolescence, nom de domaine qui ne correspond pas, etc.).
Il arrive que le fetch me renvoie un statut nul/0 (qui n'existe pas réellement).
Dans la majorité des cas, le problème est lié aux certificats du serveur (obsolescence, nom de domaine qui ne correspond pas, etc.) ou à un refus de connexion.
Les requêtes aboutissant à un code HTTP 0 ne sont pas renouvelées avant 1 semaine.
Les requêtes aboutissant à un code HTTP 0 ou à une erreur réseau ne sont pas renouvelées avant 1 semaine.
## Rapport