Automatizar

Peticiones HTTP con Python: guía de la librería requests

Cómo consumir APIs y páginas web desde Python con requests: GET, POST, parámetros, cabeceras, JSON y el manejo de errores que evita que tu script se rompa a mitad de camino.

Casi cualquier automatización seria termina hablando con internet: consultar una API, descargar datos, enviar información a un servicio. En Python eso se hace con requests, la librería más usada para peticiones HTTP porque es simple y clara. Aquí lo esencial, con los detalles que evitan que tu script falle en silencio.

pip install requests

GET: pedir datos

La petición más común. Traer información de una URL o API:

import requests

respuesta = requests.get("https://api.ejemplo.com/usuarios")
respuesta.raise_for_status()   # lanza error si algo salió mal

datos = respuesta.json()       # convierte la respuesta JSON en dict/list
print(datos)

Dos piezas clave desde el inicio. El raise_for_status() es tu red de seguridad: si el servidor responde con un error (404, 500…), detiene el script ahí con un mensaje claro, en vez de dejarte procesar una respuesta vacía y volverte loco después. Y respuesta.json() convierte directamente la respuesta en estructuras de Python, sin que tengas que parsear nada a mano.

Pasar parámetros

Para filtrar o buscar, no concatenes la URL a mano. Usa el argumento params:

respuesta = requests.get(
    "https://api.ejemplo.com/buscar",
    params={"q": "flask", "pagina": 2},
)
# requests arma la URL: .../buscar?q=flask&pagina=2

requests construye la URL correctamente y escapa los caracteres especiales por ti. Armar la cadena a mano es fuente segura de bugs cuando un parámetro lleva espacios o símbolos.

POST: enviar datos

Para crear o enviar información, normalmente en JSON:

respuesta = requests.post(
    "https://api.ejemplo.com/usuarios",
    json={"nombre": "Ana", "email": "ana@ejemplo.com"},
)
print(respuesta.status_code)   # 201 si se creó bien

Fíjate en el argumento json=: requests convierte el diccionario a JSON y pone la cabecera Content-Type: application/json automáticamente. Si en cambio necesitas enviar datos de formulario, usarías data= en lugar de json=.

Cabeceras (headers)

Muchas APIs piden autenticación por cabecera, típicamente un token:

cabeceras = {"Authorization": "Bearer TU_TOKEN"}
respuesta = requests.get("https://api.ejemplo.com/privado", headers=cabeceras)

Nunca escribas el token directamente en el código si vas a compartirlo. Cárgalo desde una variable de entorno, igual que cualquier credencial.

El timeout: el detalle que todos olvidan

Por defecto, requests espera indefinidamente una respuesta. Si el servidor no responde, tu script se cuelga para siempre. Pon siempre un timeout:

respuesta = requests.get("https://api.ejemplo.com/datos", timeout=10)

Con timeout=10, si no hay respuesta en 10 segundos, lanza un error y tu script sigue su curso en vez de quedarse congelado. En automatizaciones que corren solas, esto es la diferencia entre un fallo controlado y un proceso colgado indefinidamente.

Manejar los errores bien

Juntando todo, el patrón robusto para una petición real:

import requests

try:
    respuesta = requests.get("https://api.ejemplo.com/datos", timeout=10)
    respuesta.raise_for_status()
    datos = respuesta.json()
except requests.exceptions.Timeout:
    print("El servidor tardó demasiado en responder.")
except requests.exceptions.HTTPError as e:
    print(f"Error HTTP: {e}")
except requests.exceptions.RequestException as e:
    print(f"Fallo de conexión: {e}")
else:
    print("Datos recibidos:", datos)

Cada except atrapa un tipo de problema distinto: que el servidor tarde, que responda con error, o que ni siquiera se pueda conectar. El RequestException al final es el “atrapa todo” de requests, útil como red final. Este patrón convierte un script frágil en uno que sabe qué hacer cuando algo sale mal — que en internet, tarde o temprano, pasa.

Con esto puedes consumir prácticamente cualquier API y automatizar tareas que dependan de datos externos. Combínalo con el Programador de tareas de Windows y tendrás scripts que consultan datos y actúan solos, en el horario que definas.


¿La API que consumes usa otro tipo de autenticación, o necesitas mantener una sesión con cookies? Escríbeme desde contacto y lo vemos.

← Más de Automatizar