Subir archivos a un servicio REST es una tarea común en muchas aplicaciones web. En Python, la biblioteca requests
facilita esta tarea al proporcionar una API simple y poderosa para manejar solicitudes HTTP. Este artículo te guiará a través del proceso de subir un archivo a un servicio REST usando requests
.
Antes de comenzar, asegúrate de tener instalado Python y la biblioteca requests
. Si no tienes requests
instalado, puedes hacerlo ejecutando:
pip install requests
requests
Cuando subes un archivo a un servicio REST, generalmente utilizas una solicitud HTTP POST. En una solicitud POST, puedes enviar tanto datos como archivos al servidor. El siguiente ejemplo muestra la estructura básica de una solicitud POST con requests
:
import requests
# URL del servicio REST al que quieres subir el archivo
url = 'https://example.com/upload'
# Datos adicionales que deseas enviar con la solicitud
data = {
'usuario': 'john_doe',
'comentario': 'Subiendo un archivo a través de requests'
}
# Subiendo el archivo
files = {
'archivo': open('ruta/del/archivo.txt', 'rb')
}
response = requests.post(url, data=data, files=files)
# Verifica el estado de la respuesta
if response.status_code == 200:
print('Archivo subido con éxito')
else:
print(f'Error al subir el archivo: {response.status_code}')
usuario
y un comentario
.
files
('archivo') debe coincidir con el nombre esperado por el servidor para el archivo subido. El valor es un objeto de archivo abierto en modo binario ('rb' significa lectura en modo binario). Esto es necesario para enviar archivos binarios, como imágenes o documentos.
Si necesitas subir varios archivos en una sola solicitud, puedes hacerlo añadiendo más entradas al diccionario files
:
files = {
'archivo1': open('ruta/del/archivo1.txt', 'rb'),
'archivo2': open('ruta/del/archivo2.jpg', 'rb')
}
response = requests.post(url, data=data, files=files)
if response.status_code == 200:
print('Archivos subidos con éxito')
else:
print(f'Error al subir los archivos: {response.status_code}')
Es importante manejar las posibles excepciones que podrían ocurrir durante la solicitud, como errores de conexión o problemas al leer los archivos:
try:
response = requests.post(url, data=data, files=files)
response.raise_for_status() # Esto generará una excepción para códigos de estado 4xx/5xx
except requests.exceptions.HTTPError as errh:
print(f'Error HTTP: {errh}')
except requests.exceptions.ConnectionError as errc:
print(f'Error de conexión: {errc}')
except requests.exceptions.Timeout as errt:
print(f'Tiempo de espera agotado: {errt}')
except requests.exceptions.RequestException as err:
print(f'Error desconocido: {err}')
Después de subir un archivo, es buena práctica cerrar el archivo para liberar recursos:
with open('ruta/del/archivo.txt', 'rb') as archivo:
files = {'archivo': archivo}
response = requests.post(url, data=data, files=files)
if response.status_code == 200:
print('Archivo subido con éxito')
Usar la sentencia with
asegura que el archivo se cierre automáticamente después de que se haya terminado de usar.
Subir archivos a un servicio REST utilizando la biblioteca requests
de Python es un proceso sencillo y directo. Esta guía te ha mostrado cómo hacerlo, cubriendo tanto la subida de un solo archivo como de múltiples archivos, además de cómo manejar errores comunes que pueden ocurrir durante el proceso. La flexibilidad de requests
te permite integrar fácilmente la subida de archivos en tus aplicaciones Python.
Jorge García
Fullstack developer