Volver a la página principal
lunes 19 agosto 2024
17

Cómo subir archivos con el paquete requests de Python

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.

Requisitos previos

Antes de comenzar, asegúrate de tener instalado Python y la biblioteca requests. Si no tienes requests instalado, puedes hacerlo ejecutando:

pip install requests

1. Estructura básica de una solicitud POST con 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}')

2. Explicación del código

  • URL del servicio REST: Es la dirección del endpoint al que deseas enviar el archivo. Este endpoint debe estar preparado para recibir solicitudes POST y manejar archivos.
  • Datos adicionales (data): Puedes enviar datos adicionales en el cuerpo de la solicitud junto con el archivo. En este ejemplo, estamos enviando un usuario y un comentario.
  • Subida del archivo (files): La clave en el diccionario 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.
  • Respuesta (response): Después de enviar la solicitud, se recibe una respuesta del servidor. Verificamos el código de estado HTTP (200 indica éxito) para determinar si la subida fue exitosa.

3. Subir múltiples archivos

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}')

4. Tratamiento de excepciones

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}')

5. Cierre de archivos

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.

Conclusión

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.

Etiquetas:
python http
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer