#!/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)