Clients HTTP pour agents : httpx et requests
Requêtes HTTP synchrones et asynchrones, gestion des sessions et en-têtes.
Clients HTTP pour agents : httpx et requests est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi les clients HTTP sont importants pour les agents
Les agents d’IA doivent souvent récupérer des données auprès de sources externes : API, sites Web et services. Un client HTTP fiable est un outil essentiel de la boîte à outils de tout agent.
Python propose deux bibliothèques HTTP populaires : requests (synchrone et simple) et httpx (qui prend en charge les modes synchrone et asynchrone). Il est essentiel de comprendre quand utiliser chacune d’elles pour créer des agents efficaces.
Requête GET de base avec requests
La bibliothèque requests simplifie les appels HTTP. Utilisez requests.get(url) pour récupérer une ressource et examiner la réponse.
Vérifiez toujours le code d’état avant d’utiliser le corps de la réponse, afin d’éviter les échecs silencieux.
import requests
url = 'https://api.example.com/data'
response = requests.get(url)
print(response.status_code) # 200
print(response.text) # raw string body
print(response.json()) # parsed JSON dictAjouter des en-têtes et définir des délais d’attente
La plupart des API nécessitent des en-têtes d’authentification. Le paramètre headers= vous permet de transmettre un dictionnaire d’en-têtes. Définissez toujours un timeout= pour empêcher votre agent de rester bloqué indéfiniment sur un serveur lent.
import requests
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Accept': 'application/json'
}
response = requests.get(
'https://api.example.com/items',
headers=headers,
timeout=10 # seconds
)
data = response.json()
print(data)raise_for_status() — Échouer immédiatement en cas d’erreur
response.raise_for_status() déclenche une HTTPError pour les codes d’état 4xx et 5xx. Sans cet appel, une réponse 404 ou 500 est silencieusement considérée comme une réussite.
Il s’agit d’une bonne pratique pour les agents : échouer explicitement afin que l’agent sache s’il doit réessayer ou signaler une erreur.
import requests
try:
response = requests.get('https://api.example.com/missing', timeout=10)
response.raise_for_status() # raises if status >= 400
data = response.json()
except requests.HTTPError as e:
print(f'HTTP error: {e}')
except requests.RequestException as e:
print(f'Network error: {e}')Introduction à httpx
httpx est un client HTTP moderne dont l’API est identique à celle de requests, avec la prise en charge supplémentaire de l’asynchronisme. Il impose également des délais d’attente par défaut, ce qui le rend plus sûr pour les agents en production.
Installez-le avec pip install httpx. Son utilisation synchrone est presque identique à celle de requests.
import httpx
response = httpx.get(
'https://api.example.com/data',
headers={'Authorization': 'Bearer YOUR_KEY'},
timeout=10.0
)
response.raise_for_status()
data = response.json()
print(data)HTTP asynchrone avec httpx.AsyncClient
Lorsque votre agent s’exécute dans un contexte asynchrone, par exemple avec FastAPI ou asyncio, utilisez httpx.AsyncClient pour éviter de bloquer la boucle d’événements. Placez-le dans un bloc async with afin de garantir que la connexion est correctement fermée.
import httpx
import asyncio
async def fetch_data(url: str) -> dict:
async with httpx.AsyncClient(timeout=10.0) as client:
response = await client.get(
url,
headers={'Authorization': 'Bearer YOUR_KEY'}
)
response.raise_for_status()
return response.json()
# result = asyncio.run(fetch_data('https://api.example.com/data'))Effectuer plusieurs requêtes asynchrones simultanément
L’un des principaux avantages de l’HTTP asynchrone est de pouvoir récupérer plusieurs URL à la fois avec asyncio.gather(). Cela peut accélérer considérablement les agents qui ont besoin de données provenant de plusieurs points de terminaison avant de répondre.
import httpx
import asyncio
async def fetch_all(urls: list) -> list:
async with httpx.AsyncClient(timeout=10.0) as client:
tasks = [client.get(url) for url in urls]
responses = await asyncio.gather(*tasks)
return [r.json() for r in responses]
urls = [
'https://api.example.com/item/1',
'https://api.example.com/item/2',
'https://api.example.com/item/3'
]
# results = asyncio.run(fetch_all(urls))Réutiliser les sessions et mettre en commun les connexions
Créer une nouvelle connexion HTTP pour chaque requête est lent. Les deux bibliothèques prennent en charge la mise en commun des connexions : requests.Session et httpx.Client réutilisent les connexions TCP et partagent les en-têtes et les cookies entre les requêtes.
Cela est particulièrement utile pour les agents qui effectuent de nombreux appels vers la même API.
import httpx
# Create once, reuse for many requests
client = httpx.Client(
base_url='https://api.example.com',
headers={'Authorization': 'Bearer YOUR_KEY'},
timeout=10.0
)
response1 = client.get('/users')
response2 = client.get('/items')
response3 = client.get('/orders')
client.close() # always close when doneEnvoyer des requêtes POST avec un corps JSON
Les agents doivent souvent envoyer des données, et pas seulement les lire. Utilisez le paramètre json= pour sérialiser automatiquement un dictionnaire Python et définir l’en-tête Content-Type approprié.
import httpx
payload = {
'query': 'latest AI news',
'max_results': 5,
'language': 'en'
}
response = httpx.post(
'https://api.example.com/search',
json=payload,
headers={'Authorization': 'Bearer YOUR_KEY'},
timeout=15.0
)
response.raise_for_status()
results = response.json()
print(results['items'])Analyser la réponse : text, json et content
L’objet de réponse possède trois propriétés principales pour le corps :
.text— chaîne décodée (HTML, XML ou texte brut).json()— analyse le JSON en dictionnaire ou liste Python.content— octets bruts (pour les images ou les fichiers binaires)
Utilisez la propriété appropriée en fonction du type de contenu de l’API.
import httpx
response = httpx.get('https://api.example.com/report', timeout=10.0)
# For JSON APIs
data = response.json() # dict or list
# For HTML or plain text
html = response.text # str
# For binary files
image_bytes = response.content # bytes
print(type(data), type(html), type(image_bytes))Assembler le tout : outil de récupération HTTP pour un agent
Voici une fonction de récupération complète et réutilisable qu’un agent peut appeler comme outil. Elle gère les erreurs correctement, consigne la requête et renvoie des données structurées.
Ce modèle constitue une base solide pour tout outil d’agent qui récupère des données sur le Web.
import httpx
import logging
logger = logging.getLogger(__name__)
def agent_fetch(url: str, headers: dict = None) -> dict:
try:
response = httpx.get(
url,
headers=headers or {},
timeout=10.0
)
response.raise_for_status()
logger.info(f'Fetched {url} -> {response.status_code}')
return {'success': True, 'data': response.json()}
except httpx.HTTPStatusError as e:
return {'success': False, 'error': str(e)}
except httpx.RequestError as e:
return {'success': False, 'error': f'Network error: {e}'}Vérification des connaissances : clients HTTP
Vérifiez votre compréhension des clients HTTP pour les agents.
Récapitulatif : clients HTTP pour les agents
Dans cette leçon, vous avez appris à doter les agents de capacités fiables de récupération HTTP :
- Utiliser
requestspour les récupérations synchrones simples - Utiliser
httpx.AsyncClientpour les requêtes asynchrones non bloquantes - Toujours définir
timeout=et appelerraise_for_status() - Réutiliser les sessions ou clients pour plusieurs appels vers le même hôte
- Utiliser
.json(),.textou.contentselon le type de réponse
Un outil de récupération bien conçu est la passerelle entre votre agent et le Web.
Questions Fréquemment Posées
La leçon « Clients HTTP pour agents : httpx et requests » est-elle gratuite ?
Oui — le texte complet de « Clients HTTP pour agents : httpx et requests » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Clients HTTP pour agents : httpx et requests » ?
Requêtes HTTP synchrones et asynchrones, gestion des sessions et en-têtes. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Clients HTTP pour agents : httpx et requests » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Clients HTTP pour agents : httpx et requests
- Analyser du HTML avec BeautifulSoup
- Gérer la pagination et le contenu dynamique
- Pratiques de collecte respectueuses