| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #!/usr/bin/env python3
- """
- Script de test pour vérifier les redirections 301
- Teste que les anciennes URLs redirigent correctement vers les nouvelles
- """
- import requests
- import sys
- from urllib.parse import urljoin
- # Configuration
- BASE_URL = "https://www.duhaz.fr"
- TEST_MODE = True # Mettre False pour tester en production
- # URLs à tester
- test_urls = {
- "Ancienne catégorie avec /": {
- "url": "/blog/category/django/",
- "expected_redirect": "/blog/cat/django",
- "status_code": 301
- },
- "Ancienne catégorie sans /": {
- "url": "/blog/category/django",
- "expected_redirect": "/blog/cat/django",
- "status_code": 301
- },
- "Tag avec trailing slash": {
- "url": "/blog/tag/linux/",
- "expected_redirect": "/blog/tag/linux",
- "status_code": 301
- },
- "Article avec trailing slash": {
- "url": "/blog/comment-generer-des-cles-ssh-pour-lautorisation-git/",
- "expected_redirect": "/blog/comment-generer-des-cles-ssh-pour-lautorisation-git",
- "status_code": 301
- }
- }
- def test_redirections():
- """Teste toutes les redirections"""
- print("=" * 70)
- print("TEST DES REDIRECTIONS 301")
- print("=" * 70)
- print(f"\nBase URL: {BASE_URL}")
- print(f"Mode: {'TEST (local)' if TEST_MODE else 'PRODUCTION'}\n")
-
- success = 0
- failures = 0
-
- for test_name, test_data in test_urls.items():
- url = urljoin(BASE_URL, test_data['url'])
- expected_redirect = urljoin(BASE_URL, test_data['expected_redirect'])
-
- print(f"Test: {test_name}")
- print(f" URL: {test_data['url']}")
-
- try:
- # Ne pas suivre les redirections automatiquement
- response = requests.get(url, allow_redirects=False, timeout=10)
-
- # Vérifier le code de statut
- if response.status_code == test_data['status_code']:
- print(f" ✓ Code de statut: {response.status_code} (OK)")
-
- # Vérifier la destination de la redirection
- if 'Location' in response.headers:
- redirect_location = response.headers['Location']
-
- # Normaliser l'URL de redirection (enlever le domaine si présent)
- if redirect_location.startswith('http'):
- # URL absolue
- actual_redirect = redirect_location
- else:
- # URL relative, la convertir en absolue
- actual_redirect = urljoin(BASE_URL, redirect_location)
-
- if actual_redirect == expected_redirect:
- print(f" ✓ Redirection: {redirect_location} (OK)")
- print(" ✓ TEST RÉUSSI\n")
- success += 1
- else:
- print(f" ✗ Redirection attendue: {test_data['expected_redirect']}")
- print(f" ✗ Redirection reçue: {redirect_location}")
- print(" ✗ TEST ÉCHOUÉ\n")
- failures += 1
- else:
- print(f" ✗ Pas d'en-tête Location dans la réponse")
- print(" ✗ TEST ÉCHOUÉ\n")
- failures += 1
- else:
- print(f" ✗ Code de statut: {response.status_code} (attendu: {test_data['status_code']})")
- print(" ✗ TEST ÉCHOUÉ\n")
- failures += 1
-
- except requests.RequestException as e:
- print(f" ✗ Erreur de connexion: {e}")
- print(" ✗ TEST ÉCHOUÉ\n")
- failures += 1
-
- # Résumé
- print("=" * 70)
- print("RÉSUMÉ")
- print("=" * 70)
- print(f"Tests réussis: {success}/{len(test_urls)}")
- print(f"Tests échoués: {failures}/{len(test_urls)}")
-
- if failures == 0:
- print("\n✓ Tous les tests sont passés avec succès !")
- return 0
- else:
- print(f"\n✗ {failures} test(s) ont échoué")
- return 1
- if __name__ == "__main__":
- print("\n⚠️ IMPORTANT: Assurez-vous que le serveur Django est démarré !")
- print("⚠️ Si vous testez en local, modifiez BASE_URL dans le script\n")
-
- input("Appuyez sur Entrée pour continuer...")
-
- exit_code = test_redirections()
- sys.exit(exit_code)
|