El módulo `requests` en Python es una de las bibliotecas más utilizadas para realizar solicitudes HTTP de manera sencilla y eficiente.
Con ella, puedes:
En este post, te guiaré a través de sus principales funcionalidades y parámetros, para que puedas aprovechar al máximo esta herramienta en tus proyectos.
`requests` es una biblioteca HTTP para Python, diseñada para que las solicitudes HTTP sean fáciles de usar. Soporta múltiples métodos de solicitud como `GET`, `POST`, `PUT`, `DELETE`, entre otros, lo que la convierte en una solución integral para interactuar con APIs y servicios web.
Para instalar la biblioteca, puedes usar `pip`:
pip install requests
Para importarlo a nuestro entorno de trabajo lo hacemos de esta manera
import requests
El método más común en HTTP es `GET`, que se utiliza para obtener datos de un servidor.
respuesta = requests.get('https://url.ejemplo.com/data')
- `respuesta`: Es un objeto de la clase `Response`, que contiene la respuesta del servidor.
Aunque la solicitud básica es simple, `requests.get()` ofrece varios parámetros que te permiten personalizar la solicitud:
1. `params`: Un diccionario que puedes usar para enviar parámetros de consulta en la URL.
respuesta = requests.get('https://url.ejemplo.com/data',
params={'key': 'value'})
2. `headers`: Un diccionario que te permite enviar encabezados HTTP personalizados.
encabezados = {'Authorization': 'Bearer token123'}
respuesta = requests.get('https://url.ejemplo.com/data',
headers=encabezados)
3. `timeout`: Especifica el tiempo en segundos que la solicitud esperará antes de dar un error por tiempo de espera. Evita que la solicitud quede bloqueada si el servidor no responde.
respuesta = requests.get('https://url.ejemplo.com/data',
timeout=5)
4. `auth`: Un tuple `(usuario, contraseña)` para manejar autenticación básica.
from requests.auth import HTTPBasicAuth
respuesta = requests.get('https://url.ejemplo.com/data',
auth=HTTPBasicAuth('user', 'pass'))
5. `cookies`: Un diccionario para enviar cookies junto con la solicitud.
cookies = {'session_id': 'abcdef123456'}
respuesta = requests.get('https://url.ejemplo.com/data',
cookies=cookies)
6. `allow_redirects`: Permite o prohíbe las redirecciones HTTP (por defecto está en `True`).
respuesta = requests.get('https://url.ejemplo.com/data',
allow_redirects=False)
El objeto `Respuesta` contiene la respuesta del servidor y tiene varios atributos útiles:
1. `respuesta.status_code`: El código de estado HTTP de la respuesta.
print(respuesta.status_code)
2. `respuesta.text`: El contenido de la respuesta en formato de texto.
print(respuesta.text)
3. `respuesta.json()`: Si la respuesta es JSON, puedes convertirla directamente en un diccionario de Python.
informacion = respuesta.json()
4. `respuesta.content`: El contenido en formato binario (útil para descargar archivos).
with open('imagen.jpg', 'wb') as f:
f.write(respuesta.content)
5. `respuesta.headers`: Un diccionario con los encabezados HTTP de la respuesta.
print(respuesta.headers)
6. `respuesta.cookies`: Las cookies enviadas por el servidor.
print(respuesta.cookies)
El método `POST` se utiliza para enviar datos al servidor, por ejemplo, para enviar datos de un formulario.
info = {'nombre': 'Federico', 'edad': 48}
respuesta = requests.post('https://url.ejemplo.com/user',
data=info)
Los parámetros de `requests.post()` son similares a los de `requests.get()`, con la adición de:
1. `data`: Un diccionario de los datos que quieres enviar como cuerpo de la solicitud.
info= {'clave1': 'valor1', 'clave2': 'valor2'}
respuesta = requests.post('https://url.ejemplo.com/data',
data=info)
2. `json`: Un diccionario que se convierte automáticamente en JSON para enviarlo al servidor. Es preferible a `data` cuando trabajas con APIs que esperan datos en formato JSON.
info_json = {'nombre': 'Federico', 'edad': 48}
respuesta = requests.post('https://url.ejemplo.com/user',
json=info_json)
Además de `GET` y `POST`, `requests` soporta otros métodos HTTP importantes:
1. `requests.put()`: Utilizado para actualizar o reemplazar un recurso en el servidor.
respuesta = requests.put('https://url.ejemplo.com/data/123',
data={'clave': 'nuevo_valor'})
2. `requests.delete()`: Se utiliza para eliminar un recurso del servidor.
respuesta = requests.delete('https://url.ejemplo.com/data/123')
3. `requests.head()`: Devuelve solo los encabezados de la respuesta, sin el contenido.
respuesta = requests.head('https://url.ejemplo.com/data')
4. `requests.options()`: Devuelve los métodos HTTP permitidos en el servidor para el recurso especificado.
respuesta = requests.options('https://url.ejemplo.com/data')
Es importante manejar errores cuando trabajas con solicitudes HTTP. `requests` lanza excepciones que puedes capturar para evitar que tu programa falle en caso de un problema.
- `requests.exceptions.RequestException`: La excepción genérica que cubre todos los errores relacionados con solicitudes.
Ejemplo:
import requests
try:
respuesta = requests.get('https://url.ejemplo.com/data', timeout=5)
respuesta.raise_for_status() # Lanza una excepción si el código de estado no es 200
except requests.exceptions.HTTPError as errh:
print("Error HTTP:", errh)
except requests.exceptions.ConnectionError as errc:
print("Error de conexión:", errc)
except requests.exceptions.Timeout as errt:
print("Error de tiempo de espera:", errt)
except requests.exceptions.RequestException as err:
print("Error en la solicitud:", err)
Con `requests`, es fácil descargar archivos desde una URL y guardarlos localmente.
Ejemplo:
url = 'https://ejemplo.com/archivo.zip'
respuesta = requests.get(url, stream=True)
with open('archivo.zip', 'wb') as f:
for chunk in respuesta.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
El uso de sesiones (`requests.Session()`) te permite mantener la información a través de múltiples solicitudes, como las cookies o las cabeceras.
Ejemplo:
sesion = requests.Session()
sesion.headers.update({'Authorization': 'Bearer token123'})
respuesta = sesion.get('https://url.ejemplo.com/data')
Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn
Puedes descargar GRATIS mi manual completo en pdf de Python Rápido