Guía completa sobre cómo subir archivos usando la biblioteca requests en Python

La biblioteca requests es una de las más utilizadas para subir archivos en Python. En esta guía, se explicarán detalladamente desde las técnicas básicas hasta ejemplos avanzados y el manejo de errores al usar requests para subir archivos. Avanzaremos paso a paso para que incluso los principiantes puedan seguir sin problemas. Aprovecha esta guía para adquirir habilidades en la subida de archivos con Python.

Índice

Instalación de la biblioteca requests

Para usar la biblioteca requests en Python, primero necesitas instalarla. A continuación, se muestran los pasos para la instalación.

Pasos de instalación

La instalación de la biblioteca requests se puede hacer fácilmente con pip. Ejecuta el siguiente comando:

pip install requests

Verificación de la instalación

Una vez completada la instalación, ejecuta el siguiente código en el intérprete para verificar si la biblioteca requests se instaló correctamente.

import requests

print(requests.__version__)

Si el código muestra la versión de requests, la instalación fue exitosa.

Método básico para subir archivos

Explicaremos el método básico para subir archivos usando la biblioteca requests. En esta sección, se presentará un ejemplo simple de código para subir archivos y se explicará su funcionamiento.

Ejemplo de código básico

A continuación, se muestra un ejemplo básico de código para subir archivos usando la biblioteca requests.

import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Archivo a subir
files = {'file': open('testfile.txt', 'rb')}

# Enviar una solicitud POST
response = requests.post(url, files=files)

# Verificar el código de estado de la respuesta
print(response.status_code)

Explicación del código

  • import requests: Se importa la biblioteca requests.
  • url: Se especifica la URL de destino para la subida.
  • files: Se especifica el archivo a subir. El archivo se pasa como un diccionario, donde la clave es ‘file’ y el valor es el objeto de archivo.
  • requests.post(): Se envía una solicitud POST. El archivo se pasa con el parámetro files.
  • response.status_code: Se muestra el código de estado de la respuesta. Si se devuelve el código 200, la subida fue exitosa.

Con este método básico, es fácil realizar una subida de archivos con Python. A continuación, veamos cómo subir archivos utilizando datos de formulario multipart.

Subida de datos de formulario multipart

Explicaremos cómo subir datos de formulario multipart usando la biblioteca requests. Esta técnica es útil cuando necesitas enviar otros datos junto con el archivo.

Ejemplo básico de código para datos de formulario multipart

A continuación, se muestra un ejemplo de código para subir un archivo y otros datos del formulario juntos.

import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Archivo y otros datos a subir
files = {'file': open('testfile.txt', 'rb')}
data = {'name': 'testfile', 'description': 'This is a test file'}

# Enviar una solicitud POST
response = requests.post(url, files=files, data=data)

# Verificar el código de estado de la respuesta
print(response.status_code)

Explicación del código

  • files: Se especifica el archivo a subir en forma de diccionario, donde la clave es ‘file’ y el valor es el objeto de archivo.
  • data: Se especifican datos adicionales del formulario en forma de diccionario. En este caso, se envían dos campos: ‘name’ y ‘description’.
  • requests.post(): Se envía una solicitud POST con el archivo y los datos. El archivo se pasa con el parámetro files y los datos del formulario con el parámetro data.

Ventajas de la subida multipart

El uso de datos de formulario multipart ofrece las siguientes ventajas:

  • Puedes enviar archivos y datos de texto al mismo tiempo.
  • Permite manejar estructuras de datos más complejas al enviar archivos como parte de los datos del formulario.

Con este método, puedes realizar transferencias de datos más flexibles, enviando no solo archivos, sino también datos adicionales. A continuación, explicaremos cómo manejar errores que pueden ocurrir durante la subida.

Manejo de errores

Explicaremos los errores que pueden ocurrir durante la subida de archivos y cómo manejarlos. Un manejo adecuado de errores puede mejorar la confiabilidad del programa y la experiencia del usuario.

Método básico para el manejo de errores

A continuación, se muestra un ejemplo de código para el manejo básico de errores al subir archivos usando la biblioteca requests.

import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Archivo a subir
files = {'file': open('testfile.txt', 'rb')}

try:
    # Enviar una solicitud POST
    response = requests.post(url, files=files)
    response.raise_for_status()  # Genera un HTTPError si el código de estado no está en el rango 200-299
except requests.exceptions.RequestException as e:
    print(f'Ocurrió un error durante la subida: {e}')
else:
    print('El archivo se subió correctamente')

Explicación del código

  • try bloque: Ejecuta la solicitud para subir el archivo.
  • response.raise_for_status(): Genera un requests.exceptions.HTTPError si el código de estado no está en el rango 200-299.
  • except requests.exceptions.RequestException as e: Captura todas las excepciones relacionadas con requests y muestra un mensaje de error.
  • else bloque: Se ejecuta si no ocurre ningún error.

Ejemplos específicos de errores y cómo manejarlos

  • Error HTTP: Ocurre cuando el servidor rechaza la solicitud. Puedes detectarlo con response.raise_for_status().
  • Error de conexión: Ocurre cuando no se puede conectar al servidor, por ejemplo, si la red está caída. Se puede capturar con requests.exceptions.ConnectionError.
  • Error de tiempo de espera: Ocurre cuando la solicitud excede el tiempo de espera. Se puede capturar con requests.exceptions.Timeout.
import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Archivo a subir
files = {'file': open('testfile.txt', 'rb')}

try:
    # Enviar una solicitud POST (configurar el tiempo de espera)
    response = requests.post(url, files=files, timeout=10)
    response.raise_for_status()
except requests.exceptions.Timeout:
    print('La solicitud ha excedido el tiempo de espera')
except requests.exceptions.ConnectionError:
    print('Ocurrió un error de conexión')
except requests.exceptions.HTTPError as http_err:
    print(f'Ocurrió un error HTTP: {http_err}')
except requests.exceptions.RequestException as e:
    print(f'Ocurrió otro tipo de error: {e}')
else:
    print('El archivo se subió correctamente')

El manejo adecuado de errores mejora la estabilidad y confiabilidad del programa. A continuación, explicaremos cómo subir varios archivos a la vez.

Ejemplo avanzado: Subida de múltiples archivos

Presentamos un método para subir varios archivos a la vez usando la biblioteca requests. En esta sección, se proporciona un ejemplo concreto de código para realizar la subida eficiente de múltiples archivos.

Ejemplo de código para subir múltiples archivos

A continuación, se muestra un ejemplo de código para subir varios archivos.

import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Múltiples archivos a subir
files = {
    'file1': open('testfile1.txt', 'rb'),
    'file2': open('testfile2.txt', 'rb')
}

# Enviar una solicitud POST
response = requests.post(url, files=files)

# Verificar el código de estado de la respuesta
print(response.status_code)

Explicación del código

  • files: Se especifican varios archivos en forma de diccionario, donde las claves son los nombres de los archivos y los valores son los objetos de archivo.
  • requests.post(): Se envía una solicitud POST con múltiples archivos utilizando el parámetro files.

Combinación con datos adicionales del formulario

Al subir varios archivos, también puedes incluir datos adicionales del formulario. A continuación se muestra un ejemplo de código.

import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Múltiples archivos a subir
files = {
    'file1': open('testfile1.txt', 'rb'),
    'file2': open('testfile2.txt', 'rb')
}

# Datos adicionales del formulario
data = {
    'username': 'testuser',
    'description': 'Uploading multiple files'
}

# Enviar una solicitud POST
response = requests.post(url, files=files, data=data)

# Verificar el código de estado de la respuesta
print(response.status_code)

Explicación del código

  • files: Se especifican varios archivos en forma de diccionario.
  • data: Se especifican datos adicionales del formulario en forma de diccionario. En este ejemplo, se envían un nombre de usuario y una descripción.
  • requests.post(): Se envía una solicitud POST que incluye tanto los archivos como los datos adicionales.

Con este método, puedes subir múltiples archivos de manera eficiente y, si es necesario, enviar datos adicionales al mismo tiempo. A continuación, explicaremos cómo subir archivos cuando es necesario autenticarse.

Subida de archivos con autenticación

Explicaremos cómo subir archivos a un sitio web que requiere autenticación. La biblioteca requests facilita el envío de solicitudes con información de autenticación.

Ejemplo básico de autenticación

A continuación, se muestra un ejemplo básico de código para subir archivos a un sitio web que requiere autenticación HTTP básica.

import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Información de autenticación
auth = ('username', 'password')

# Archivo a subir
files = {'file': open('testfile.txt', 'rb')}

# Enviar una solicitud POST
response = requests.post(url, files=files, auth=auth)

# Verificar el código de estado de la respuesta
print(response.status_code)

Explicación del código

  • auth: Se especifica la información de autenticación en forma de tupla, en este caso, el nombre de usuario y la contraseña.
  • requests.post(): Se utiliza el parámetro auth para enviar la solicitud con la información de autenticación.

Ejemplo de autenticación con token

A continuación se muestra un ejemplo de código para usar autenticación por token. En este ejemplo, se utiliza un token Bearer.

import requests

# URL de destino para la subida
url = 'https://example.com/upload'

# Encabezados para la autenticación por token
headers = {'Authorization': 'Bearer your_token_here'}

# Archivo a subir
files = {'file': open('testfile.txt', 'rb')}

# Enviar una solicitud POST
response = requests.post(url, files=files, headers=headers)

# Verificar el código de estado de la respuesta
print(response.status_code)

Explicación del código

  • headers: Se especifican los encabezados de autenticación en forma de diccionario. En este caso, se usa un token Bearer.
  • requests.post(): Se envía la solicitud con los encabezados de autenticación utilizando el parámetro headers.

Ejemplo de autenticación OAuth

A continuación, se muestra un ejemplo de código para usar autenticación OAuth. Utilizaremos OAuth2.0 para obtener un token de acceso y luego usar ese token para subir archivos.

import requests
from requests_oauthlib import OAuth2Session

# Configuración de OAuth2
client_id = 'your_client_id'
client_secret = 'your_client_secret'
authorization_base_url = 'https://example.com/oauth/authorize'
token_url = 'https://example.com/oauth/token'

# Crear una sesión OAuth2
oauth = OAuth2Session(client_id)
authorization_url, state = oauth.authorization_url(authorization_base_url)

# Mostrar la URL de autorización al usuario y obtener la URL de redirección
print('Please go to {} and authorize access.'.format(authorization_url))
redirect_response = input('Paste the full redirect URL here: ')

# Obtener el token
oauth.fetch_token(token_url, authorization_response=redirect_response, client_secret=client_secret)

# URL de destino para la subida
url = 'https://example.com/upload'

# Archivo a subir
files = {'file': open('testfile.txt', 'rb')}

# Enviar una solicitud POST
response = oauth.post(url, files=files)

# Verificar el código de estado de la respuesta
print(response.status_code)

Explicación del código

  • OAuth2Session: Se crea una sesión OAuth2.
  • authorization_url: Se genera una URL para que el usuario autorice el acceso.
  • fetch_token(): Se obtiene el token de acceso usando la URL de redirección después de la autorización del usuario.
  • oauth.post(): Se utiliza la sesión OAuth para subir el archivo.

De esta manera, puedes subir archivos a sitios que requieren autenticación. A continuación, proporcionaremos ejercicios para poner en práctica lo aprendido en este artículo.

Ejercicios

Aquí se proporcionan ejercicios para que practiques la subida de archivos utilizando la biblioteca requests. Trabaja en cada uno de ellos para profundizar tu comprensión.

Ejercicio 1: Subida básica de archivos

Sigue las instrucciones para escribir un código que realice una subida básica de archivos.

  1. Instala la biblioteca requests.
  2. Selecciona un archivo cualquiera y envía una solicitud POST a la URL de destino para subirlo.
  3. Muestra el código de estado para confirmar que la subida fue exitosa.

Ejemplo

import requests

url = 'https://example.com/upload'
files = {'file': open('example.txt', 'rb')}
response = requests.post(url, files=files)
print(response.status_code)

Ejercicio 2: Subida de datos de formulario multipart

Sigue las instrucciones para escribir un código que suba archivos utilizando datos de formulario multipart.

  1. Envía un archivo junto con el nombre de usuario y la descripción como datos del formulario.
  2. Envía una solicitud POST a la URL de destino.
  3. Muestra el código de estado para confirmar que la subida fue exitosa.

Ejemplo

import requests

url = 'https://example.com/upload'
files = {'file': open('example.txt', 'rb')}
data = {'

username': 'testuser', 'description': 'Test file upload'}
response = requests.post(url, files=files, data=data)
print(response.status_code)

Ejercicio 3: Subida de archivos con manejo de errores

Sigue las instrucciones para escribir un código que maneje errores durante la subida de archivos.

  1. Añade un bloque try-except al código básico de subida de archivos.
  2. Maneja adecuadamente errores de conexión, tiempo de espera y errores HTTP.

Ejemplo

import requests

url = 'https://example.com/upload'
files = {'file': open('example.txt', 'rb')}

try:
    response = requests.post(url, files=files, timeout=10)
    response.raise_for_status()
except requests.exceptions.Timeout:
    print('La solicitud ha excedido el tiempo de espera')
except requests.exceptions.ConnectionError:
    print('Ocurrió un error de conexión')
except requests.exceptions.HTTPError as http_err:
    print(f'Ocurrió un error HTTP: {http_err}')
except requests.exceptions.RequestException as e:
    print(f'Ocurrió otro tipo de error: {e}')
else:
    print('El archivo se subió correctamente')

Ejercicio 4: Subida de múltiples archivos

Sigue las instrucciones para escribir un código que suba múltiples archivos a la vez.

  1. Selecciona dos o más archivos y envíalos a la URL de destino.
  2. Muestra el código de estado para confirmar que la subida fue exitosa.

Ejemplo

import requests

url = 'https://example.com/upload'
files = {
    'file1': open('example1.txt', 'rb'),
    'file2': open('example2.txt', 'rb')
}
response = requests.post(url, files=files)
print(response.status_code)

Ejercicio 5: Subida de archivos con autenticación

Sigue las instrucciones para escribir un código que suba archivos a un sitio web que requiere autenticación.

  1. Usa autenticación HTTP básica o autenticación por token para subir el archivo.
  2. Envía una solicitud POST a la URL de destino.
  3. Muestra el código de estado para confirmar que la subida fue exitosa.

Ejemplo (autenticación HTTP básica)

import requests

url = 'https://example.com/upload'
auth = ('username', 'password')
files = {'file': open('example.txt', 'rb')}
response = requests.post(url, files=files, auth=auth)
print(response.status_code)

Realiza cada ejercicio para aprender de manera práctica cómo subir archivos usando la biblioteca requests en diferentes escenarios. A continuación, resumiremos el contenido de este artículo.

Conclusión

En este artículo, hemos explicado detalladamente cómo subir archivos usando la biblioteca requests en Python, desde lo básico hasta lo avanzado. A continuación, se resumen los puntos principales.

  • Instalación de la biblioteca requests: Se puede instalar fácilmente con el comando pip install requests.
  • Subida básica de archivos: Aprendimos el método básico para subir un archivo.
  • Subida de datos de formulario multipart: Mostramos cómo enviar archivos junto con otros datos del formulario.
  • Manejo de errores: Aprendimos a manejar errores durante la subida de archivos.
  • Subida de múltiples archivos: Explicamos cómo subir varios archivos a la vez.
  • Subida de archivos con autenticación: Aprendimos cómo subir archivos con información de autenticación.

Utilizando estos conocimientos, podrás adquirir habilidades para subir archivos en diversos escenarios. No olvides realizar los ejercicios para profundizar tu comprensión.

Índice