""" Script de test pour vérifier que le proxy fonctionne correctement """ import requests import sys import time from urllib.parse import quote # Configuration PROXY_URL = "http://localhost:8080" VIDEO_URL = "https://17.mugiwara.xyz/op/saga-7/hd/527.mp4" def test_health(): """Test 1: Vérifier que le serveur est démarré""" print("\n" + "="*80) print("TEST 1: Health Check") print("="*80) try: response = requests.get(f"{PROXY_URL}/health", timeout=5) if response.status_code == 200: data = response.json() print(f"✓ Serveur actif") print(f" Service: {data.get('service')}") print(f" Version: {data.get('version')}") return True else: print(f"✗ Erreur: Status {response.status_code}") return False except requests.exceptions.ConnectionError: print(f"✗ ERREUR: Impossible de se connecter au serveur") print(f" Démarrez le serveur avec: python video_proxy_server.py") return False except Exception as e: print(f"✗ Erreur: {str(e)}") return False def test_info(): """Test 2: Récupérer les informations de la vidéo""" print("\n" + "="*80) print("TEST 2: Video Info") print("="*80) try: url = f"{PROXY_URL}/info?url={quote(VIDEO_URL)}" print(f"Requête: {url}") response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json() print(f"\n✓ Informations récupérées:") print(f" URL : {data.get('url')}") print(f" Accessible : {data.get('accessible')}") print(f" Status Code : {data.get('status_code')}") print(f" Content-Type : {data.get('content_type')}") print(f" Taille : {data.get('content_length_mb')} MB") print(f" Serveur : {data.get('server')}") return data.get('accessible', False) else: print(f"✗ Erreur: Status {response.status_code}") return False except Exception as e: print(f"✗ Erreur: {str(e)}") return False def test_streaming(): """Test 3: Tester le streaming (premiers bytes)""" print("\n" + "="*80) print("TEST 3: Video Streaming") print("="*80) try: url = f"{PROXY_URL}/proxy?url={quote(VIDEO_URL)}" print(f"Requête: {url}") print(f"Téléchargement des premiers 1 MB...") response = requests.get(url, stream=True, timeout=30) if response.status_code in [200, 206]: # Télécharger seulement 1 MB pour tester chunk_count = 0 max_chunks = 128 # 128 chunks de 8KB = 1 MB start_time = time.time() for chunk in response.iter_content(chunk_size=8192): if chunk: chunk_count += 1 if chunk_count >= max_chunks: break elapsed = time.time() - start_time downloaded_mb = (chunk_count * 8192) / (1024 * 1024) speed_mbps = (downloaded_mb / elapsed) if elapsed > 0 else 0 print(f"\n✓ Streaming fonctionne!") print(f" Téléchargé : {downloaded_mb:.2f} MB") print(f" Temps : {elapsed:.2f} secondes") print(f" Vitesse : {speed_mbps:.2f} MB/s") print(f" Status : {response.status_code}") print(f" Content-Type : {response.headers.get('Content-Type')}") return True else: print(f"✗ Erreur: Status {response.status_code}") return False except Exception as e: print(f"✗ Erreur: {str(e)}") return False def test_range_request(): """Test 4: Tester les Range requests (seeking)""" print("\n" + "="*80) print("TEST 4: Range Request (Seeking)") print("="*80) try: url = f"{PROXY_URL}/proxy?url={quote(VIDEO_URL)}" # Demander seulement 100KB depuis le milieu de la vidéo headers = { 'Range': 'bytes=10000000-10100000' } print(f"Requête avec Range: {headers['Range']}") response = requests.get(url, headers=headers, timeout=10) if response.status_code == 206: # 206 Partial Content content_range = response.headers.get('Content-Range') content_length = len(response.content) print(f"\n✓ Range request fonctionne!") print(f" Status : {response.status_code} Partial Content") print(f" Content-Range : {content_range}") print(f" Taille reçue : {content_length / 1024:.2f} KB") return True else: print(f"⚠️ Range request non supporté (Status: {response.status_code})") print(f" Le seeking dans la vidéo peut ne pas fonctionner") return False except Exception as e: print(f"✗ Erreur: {str(e)}") return False def test_direct_access(): """Test 5: Vérifier que l'accès direct échoue toujours""" print("\n" + "="*80) print("TEST 5: Direct Access (doit échouer)") print("="*80) try: print(f"Tentative d'accès direct à: {VIDEO_URL}") # Accès sans le Referer correct response = requests.head(VIDEO_URL, timeout=10) if response.status_code == 403: print(f"\n✓ Comportement attendu: 403 Forbidden") print(f" Le serveur protège bien ses vidéos") return True else: print(f"⚠️ Status inattendu: {response.status_code}") print(f" La protection peut avoir changé") return False except Exception as e: print(f"✗ Erreur: {str(e)}") return False def generate_test_html(): """Génère une page HTML de test""" print("\n" + "="*80) print("GÉNÉRATION DE LA PAGE DE TEST") print("="*80) proxy_url = f"{PROXY_URL}/proxy?url={quote(VIDEO_URL)}" html = f"""
{proxy_url}
{VIDEO_URL}