Requests: guía completa para trabajar con HTTP en Python

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a la biblioteca Requests

Requests es una biblioteca simple y potente para trabajar con peticiones HTTP en Python. Proporciona una interfaz cómoda para realizar operaciones con APIs REST, descargar datos de sitios web, así como enviar archivos y manejar autenticación. Gracias a su sintaxis clara y su amplio conjunto de funcionalidades, Requests se ha convertido en el estándar de facto entre los clientes HTTP de Python.

La biblioteca Requests fue creada por Kenneth Reitz en 2011 con el objetivo de hacer que las peticiones HTTP en Python fueran lo más simples y prácticas posible. Está construida sobre urllib3 y ofrece una API de alto nivel para trabajar con el protocolo HTTP.

Ventajas de Requests frente a urllib

  • Sintaxis más legible — métodos y parámetros intuitivos
  • Manejo automático de cookies y redirecciones — sin configuración adicional
  • Trabajo sencillo con JSON, cabeceras y formularios — soporte integrado para formatos populares
  • Soporte para sesiones, proxies y autenticación — conjunto completo de herramientas para servicios web
  • Soporte para todos los métodos HTTP — GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
  • Decodificación automática del contenido — manejo inteligente de codificaciones
  • Soporte SSL incorporado — conexiones seguras por defecto

Instalación e importación de la biblioteca

Instalación con pip:

pip install requests

Para actualizar a la última versión:

pip install --upgrade requests

Importación de la biblioteca:

import requests

Métodos principales de peticiones HTTP

Envío de peticiones GET

Las peticiones GET se utilizan para obtener datos del servidor:

response = requests.get('https://api.example.com/data')
print(response.status_code)  # Código de respuesta
print(response.text)         # Texto de la respuesta

Obtención de datos JSON:

response = requests.get('https://api.example.com/users')
data = response.json()  # Conversión automática a diccionario de Python
print(data)

Envío de peticiones POST

Las peticiones POST se utilizan para enviar datos al servidor:

payload = {'username': 'admin', 'password': '123'}
response = requests.post('https://api.example.com/login', data=payload)

Envío de datos JSON:

user_data = {'name': 'John', 'email': 'john@example.com'}
response = requests.post('https://api.example.com/users', json=user_data)

Uso de PUT, PATCH y DELETE

# PUT - actualización completa de un recurso
requests.put('https://api.example.com/user/1', json={'name': 'New Name', 'email': 'new@example.com'})

# PATCH - actualización parcial de un recurso
requests.patch('https://api.example.com/user/1', json={'active': True})

# DELETE - eliminación de un recurso
requests.delete('https://api.example.com/user/1')

# HEAD - obtener solo las cabeceras
response = requests.head('https://api.example.com/user/1')
print(response.headers)

Trabajo con parámetros de consulta

Los parámetros de URL se pueden pasar mediante un diccionario:

params = {'search': 'python', 'limit': 10, 'page': 1}
response = requests.get('https://api.example.com/search', params=params)
print(response.url)  # Muestra la URL completa con los parámetros

También se pueden pasar parámetros como una lista de tuplas:

params = [('tag', 'python'), ('tag', 'web'), ('limit', 20)]
response = requests.get('https://api.example.com/posts', params=params)                    

Recommendations