Clientes HTTP para agentes: httpx y requests
Solicitudes HTTP síncronas y asíncronas, gestión de sesiones y cabeceras.
Clientes HTTP para agentes: httpx y requests es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
Por qué los clientes HTTP son importantes para los agentes
Los agentes de IA suelen necesitar obtener datos de fuentes externas: API, sitios web y servicios. Un cliente HTTP fiable es una herramienta fundamental en el conjunto de herramientas de cualquier agente.
Python cuenta con dos bibliotecas HTTP populares: requests (síncrona y sencilla) y httpx (compatible con operaciones síncronas y asíncronas). Comprender cuándo utilizar cada una es esencial para crear agentes eficientes.
Solicitud GET básica con requests
La biblioteca requests facilita las llamadas HTTP sencillas. Utilice requests.get(url) para obtener un recurso e inspeccionar la respuesta.
Compruebe siempre el código de estado antes de utilizar el cuerpo de la respuesta para evitar errores silenciosos.
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 dictCómo añadir encabezados y tiempos de espera
La mayoría de las API requieren encabezados de autenticación. El parámetro headers= permite pasar un diccionario de encabezados. Establezca siempre un timeout= para evitar que el agente se quede bloqueado indefinidamente ante un servidor lento.
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() — Fallar rápidamente ante errores
response.raise_for_status() lanza un HTTPError para los códigos de estado 4xx y 5xx. Sin este método, una respuesta 404 o 500 se trata silenciosamente como un éxito.
Esta es una práctica recomendada en los agentes: genere errores explícitos para que el agente sepa si debe reintentar o informar de un error.
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}')Introducción a httpx
httpx es un cliente HTTP moderno con la misma API que requests, pero con compatibilidad adicional con operaciones asíncronas. También aplica tiempos de espera de forma predeterminada, lo que lo hace más seguro para agentes en producción.
Instálelo con pip install httpx. El uso síncrono es casi idéntico al 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 asíncrono con httpx.AsyncClient
Cuando el agente se ejecuta en un contexto asíncrono (por ejemplo, con FastAPI o asyncio), utilice httpx.AsyncClient para evitar bloquear el bucle de eventos. Envuélvalo en async with para asegurarse de que la conexión se cierre correctamente.
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'))Realización simultánea de varias solicitudes asíncronas
Una de las principales ventajas del HTTP asíncrono es obtener varias URL a la vez con asyncio.gather(). Esto puede acelerar considerablemente los agentes que necesitan datos de varios endpoints antes de responder.
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))Reutilización de sesiones y agrupación de conexiones
Crear una conexión HTTP nueva para cada solicitud es lento. Ambas bibliotecas admiten la agrupación de conexiones: requests.Session y httpx.Client reutilizan las conexiones TCP y comparten encabezados y cookies entre solicitudes.
Esto resulta especialmente útil en agentes que realizan muchas llamadas a la misma 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 doneEnvío de solicitudes POST con cuerpo JSON
Los agentes a menudo necesitan enviar datos, no solo leerlos. Utilice el parámetro json= para serializar automáticamente un diccionario de Python y establecer el encabezado Content-Type correcto.
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'])Análisis de la respuesta: text, json y content
El objeto de respuesta tiene tres propiedades principales para el cuerpo:
.text— cadena decodificada (HTML, XML o texto sin formato).json()— analiza JSON y lo convierte en un dict o una list de Python.content— bytes sin procesar (para imágenes o archivos binarios)
Utilice la propiedad adecuada según el tipo de contenido de la 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))Integración: herramienta de obtención HTTP para agentes
A continuación se muestra una función completa y reutilizable para obtener datos, que el agente puede invocar como herramienta. Gestiona los errores correctamente, registra la solicitud y devuelve datos estructurados.
Este patrón constituye una base sólida para cualquier herramienta de agentes que obtenga datos de la 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}'}Comprobación de conocimientos: clientes HTTP
Compruebe sus conocimientos sobre los clientes HTTP para agentes.
Resumen: clientes HTTP para agentes
En esta lección ha aprendido a dotar a los agentes de capacidades fiables para obtener datos mediante HTTP:
- Utilice
requestspara obtener datos de forma síncrona y sencilla - Utilice
httpx.AsyncClientpara realizar solicitudes asíncronas sin bloqueo - Establezca siempre
timeout=y llame araise_for_status() - Reutilice las sesiones o los clientes para realizar varias llamadas al mismo host
- Utilice
.json(),.texto.contentsegún el tipo de respuesta
Una herramienta de obtención de datos bien escrita es la puerta de enlace entre su agente y la web.
Aprende AI Agents con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 60
- Lecciones
- 239
Preguntas frecuentes
¿La lección «Clientes HTTP para agentes: httpx y requests» es gratis?
Sí — el texto completo de «Clientes HTTP para agentes: httpx y requests» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Clientes HTTP para agentes: httpx y requests»?
Solicitudes HTTP síncronas y asíncronas, gestión de sesiones y cabeceras. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Clientes HTTP para agentes: httpx y requests»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Clientes HTTP para agentes: httpx y requests
- Análisis de HTML con BeautifulSoup
- Gestión de la paginación y el contenido dinámico
- Prácticas responsables de scraping