Exemples d’utilisation
Cette section présente des exemples d’utilisation d’IziProxy dans différents scénarios.
Exemple basique
from iziproxy import IziProxy
import requests
# Création d'une instance avec détection automatique
proxy = IziProxy()
# Obtenir une session configurée
session = proxy.create_session()
# Faire une requête
response = session.get('https://httpbin.org/ip')
print(response.json())
Utilisation avec un dictionnaire de proxy
from iziproxy import IziProxy
import requests
# Création d'une instance
proxy = IziProxy()
# Obtenir un dictionnaire de proxy
proxies = proxy.get_proxy_dict()
# Utiliser avec des requêtes individuelles
response = requests.get('https://httpbin.org/get', proxies=proxies)
print(response.json())
# Ou avec une session
session = requests.Session()
session.proxies = proxies
response = session.get('https://httpbin.org/headers')
print(response.json())
Configuration explicite
from iziproxy import IziProxy
# Création avec configuration explicite
proxy = IziProxy(
proxy_url="http://proxy.example.com:8080",
username="user",
password="pass",
environment="dev"
)
# Toutes les requêtes utiliseront cette configuration
session = proxy.create_session()
response = session.get('https://example.com')
Utilisation de fichier de configuration
from iziproxy import IziProxy
# Charger la configuration depuis un fichier
proxy = IziProxy(config_path="/chemin/vers/config.yml")
# Utiliser la configuration chargée
session = proxy.create_session()
response = session.get('https://example.com')
Exemple avec authentification NTLM
from iziproxy import IziProxy
# Configuration pour proxy avec NTLM
proxy = IziProxy(
proxy_url="http://proxy.example.com:8080",
username="DOMAIN\\user", # Notez la double barre oblique
password="pass",
domain="DOMAIN" # Peut être omis si inclus dans le nom d'utilisateur
)
# Créer une session avec authentification NTLM
session = proxy.create_session()
response = session.get('https://example.com')
Variables d’environnement
from iziproxy import IziProxy
import urllib.request
# Création d'une instance
proxy = IziProxy()
# Définir les variables d'environnement
proxy.set_environment_variables()
try:
# Utiliser d'autres bibliothèques qui respectent les variables d'environnement
response = urllib.request.urlopen('https://httpbin.org/get')
print(response.read().decode('utf-8'))
finally:
# Toujours nettoyer les variables d'environnement
proxy.clear_environment_variables()
Monkey patching
Le monkey patching permet de remplacer les méthodes du module requests standard pour que toutes les requêtes utilisent automatiquement IziProxy.
from iziproxy import IziProxy
import requests
# Configurer IziProxy et patcher le module requests
proxy = IziProxy()
proxy.patch_requests()
# À partir de ce point, toutes les requêtes utiliseront automatiquement le proxy
response = requests.get('https://httpbin.org/ip')
print(response.json())
# Restaurer requests à son état original
proxy.unpatch_requests()
Intégration avec des wrappers d’API
Un cas d’utilisation avancé est l’intégration avec des wrappers d’API tierces qui utilisent requests en interne.
class APIClient:
"""
Client pour interagir avec une API tierce
"""
def __init__(self):
# Configuration
self.api_key = "your-api-key"
self.api_url = "https://api.example.com"
# Obtention d'une session préconfigurée avec IziProxy
self.session = IziProxy().create_session()
# Monkey patch requests methods avec notre session
self._patch_requests()
# Important: l'API est initialisée APRÈS le monkey patching
self.api = None
self._initialize_api()
def _initialize_api(self):
"""
Initialise l'API tierce (qui utilisera requests en interne)
"""
self.api = SomeThirdPartyAPI(
self.api_url,
self.api_key
)
def _patch_requests(self):
"""
Remplace les méthodes du module requests par celles de notre session
"""
import requests
# Remplacer les méthodes par celles de notre session préconfigurée
requests.get = self.session.get
requests.post = self.session.post
requests.put = self.session.put
requests.delete = self.session.delete
def find_resources(self, query_params):
"""
Recherche des ressources via l'API
"""
# L'API tierce utilise requests.get en interne, qui a été patché
# pour utiliser notre session IziProxy
response = self.api.find_resources(query_params)
return response
Détection d’environnement personnalisée
import os
from iziproxy import IziProxy
# Définir une variable d'environnement
os.environ['ENV'] = 'prod'
# IziProxy détectera l'environnement 'prod'
proxy = IziProxy()
print(f"Environnement détecté: {proxy.get_current_environment()}")
# Forcer un environnement spécifique
proxy = IziProxy(environment='dev')
print(f"Environnement forcé: {proxy.get_current_environment()}")
Utilisation en parallèle (multithreading)
import concurrent.futures
from iziproxy import IziProxy
proxy = IziProxy()
def fetch_url(url):
# Créer une nouvelle session pour chaque thread
session = proxy.create_session()
response = session.get(url)
return url, response.status_code
urls = [
'https://httpbin.org/get',
'https://httpbin.org/headers',
'https://httpbin.org/ip',
'https://httpbin.org/user-agent'
]
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
results = list(executor.map(fetch_url, urls))
for url, status in results:
print(f"{url}: {status}")
Exemples de code complets
Pour des exemples de code complets, consultez le dossier examples du projet :
simple_usage.py - Utilisation basique d’IziProxy
custom_config.py - Configuration personnalisée
ntlm_auth_example.py - Utilisation avec authentification NTLM
env_credentials.py - Utilisation des variables d’environnement et fichiers .env
monkey_patching.py - Utilisation du monkey patching
api_wrapper_integration.py - Intégration avec des wrappers d’API