Fonctionnalités avancées

Cette section décrit les fonctionnalités avancées d’IziProxy et comment les utiliser dans des scénarios complexes.

Authentification NTLM avancée

Configuration manuelle de l’authentification NTLM

Dans certains cas, vous pourriez avoir besoin de configurer manuellement les paramètres NTLM :

from iziproxy import IziProxy

proxy = IziProxy(
    proxy_url="http://proxy.example.com:8080",
    username="DOMAIN\\user",  # Ou simplement "user" si vous spécifiez le domaine
    password="password",
    domain="DOMAIN",  # Optionnel si le domaine est dans le nom d'utilisateur
    environment="prod"
)

session = proxy.create_session()

Utilisation directe des classes NTLM

Pour des besoins spécifiques, vous pouvez utiliser directement les classes d’authentification NTLM :

from iziproxy.ntlm_auth import NtlmProxyManager, is_ntlm_auth_available

# Vérifier si l'authentification NTLM est disponible
if is_ntlm_auth_available():
    # Créer un gestionnaire NTLM
    ntlm_manager = NtlmProxyManager()

    # Créer une session NTLM
    session = ntlm_manager.create_ntlm_proxy_session(
        proxy_host="proxy.example.com",
        proxy_port=8080,
        username="user",
        password="password",
        domain="DOMAIN",
        workstation="MYPC"  # Nom de poste optionnel
    )

    # Utiliser la session
    response = session.get("https://example.com")

Gestion de proxy avec PAC

Support des fichiers PAC

IziProxy peut utiliser des fichiers PAC (Proxy Auto-Configuration) pour déterminer le proxy à utiliser :

# Utilisation d'un fichier PAC spécifique
proxy = IziProxy(pac_url="http://internal.example.com/proxy.pac")

# La détection PAC est également activée par défaut
# IziProxy cherchera automatiquement les fichiers PAC configurés sur le système

Tester le proxy PAC pour une URL spécifique

Les fichiers PAC peuvent retourner différents proxys selon l’URL de destination :

# Pour une URL spécifique
proxies = proxy.get_proxy_dict(url="https://example.com")

# Pour une autre URL
proxies_intranet = proxy.get_proxy_dict(url="https://intranet.example.com")

Proxy système avancé

Détection de proxy dans des environnements complexes

IziProxy utilise plusieurs méthodes pour détecter le proxy système :

from iziproxy.proxy_detector import ProxyDetector

# Configuration détaillée
detector = ProxyDetector({
    "use_system_proxy": True,
    "detect_pac": True
})

# Détecter le proxy pour une URL spécifique
proxies = detector.detect_system_proxy("https://example.com")

# Forcer le rafraîchissement de la détection
proxies = detector.detect_system_proxy(force_refresh=True)

Contourner le proxy pour certaines URLs

Vous pouvez configurer des exceptions pour certaines URLs :

# Dans iziproxy.yml
environments:
  prod:
    proxy_url: "http://proxy.example.com:8080"
    no_proxy: "localhost,127.0.0.1,.example.com"

Ou par code :

from iziproxy import IziProxy
import os

# Définir NO_PROXY avant de créer l'instance
os.environ["NO_PROXY"] = "localhost,127.0.0.1,.example.com"

proxy = IziProxy()
session = proxy.create_session()

# Les requêtes vers ces domaines contourneront le proxy
response = session.get("http://localhost:8000")

Débugger les problèmes de proxy

Activer le mode de débogage

Pour diagnostiquer les problèmes de proxy, activez le mode débogage :

proxy = IziProxy(debug=True)

# Ou activez-le plus tard
proxy.set_debug(True)

Les logs détaillés seront affichés dans la console.

Effectuer un diagnostic complet

from iziproxy import IziProxy

# Créer une instance avec débogage
proxy = IziProxy(debug=True)

# Afficher les informations de diagnostic
print(f"Environnement détecté: {proxy.get_current_environment()}")
print(f"Configuration proxy: {proxy.get_proxy_config()}")

# Essayer une requête de test
try:
    session = proxy.create_session()
    response = session.get("https://httpbin.org/ip", timeout=5)
    print(f"Statut: {response.status_code}")
    print(f"Réponse: {response.text}")
except Exception as e:
    print(f"Erreur: {e}")

# Forcer le rafraîchissement et réessayer
proxy.refresh()
print(f"Configuration après refresh: {proxy.get_proxy_config()}")

Gestion sécurisée des identifiants

IziProxy utilise SecurePassword pour protéger les mots de passe en mémoire :

from iziproxy.secure_config import SecurePassword

# Créer un mot de passe sécurisé
password = SecurePassword("mon_mot_de_passe")

# Le mot de passe est masqué dans les représentations
print(password)  # Affiche: ***********

# Mais il peut être récupéré si nécessaire
real_password = password.get_password()

Personnalisation de la détection d’environnement

Vous pouvez personnaliser la façon dont IziProxy détecte l’environnement actuel :

from iziproxy.env_detector import EnvironmentDetector

# Configuration personnalisée
config = {
    "environment_detection": {
        "method": "hostname",  # Utiliser uniquement la détection par nom d'hôte
        "hostname_patterns": {
            "prod": ["prod", "prd", "production", "p-"],
            "dev": ["dev", "development", "d-"],
            "test": ["test", "tst", "t-"]
        }
    }
}

# Créer un détecteur personnalisé
detector = EnvironmentDetector(config)
env = detector.detect_environment()

# Utiliser ce détecteur avec IziProxy
from iziproxy import IziProxy
proxy = IziProxy(config_path="custom_config.yml")