Cómo cargar archivos con la biblioteca de solicitudes de Python

C

Introducción

Python es compatible con muchas bibliotecas que simplifican la transferencia de datos a través de HTTP. los requests library es uno de los paquetes de Python más populares ya que se usa mucho en web scraping. ¡También es popular para interactuar con servidores! La biblioteca facilita la carga de datos en un formato popular como JSON, pero también facilita la carga de archivos.

En este tutorial, veremos cómo cargar archivos usando Python requests biblioteca. El artículo comenzará cubriendo el requests biblioteca y la post() firma de la función. A continuación, cubriremos cómo cargar un solo archivo usando el requests paquete. Por último, pero no menos importante, cargamos varios archivos en una sola solicitud.

Carga de un solo archivo con la biblioteca de solicitudes de Python

Este tutorial cubre cómo enviar los archivos, no nos preocupa cómo se crean. Para seguirlo, cree tres archivos llamados my_file.txt, my_file_2.txt y my_file_3.txt.

Lo primero que debemos hacer es instalar nuestro request biblioteca en nuestro espacio de trabajo. Si bien no es necesario, se recomienda que instale bibliotecas en un entorno virtual:

$ python3 -m venv .

Active el entorno virtual para que ya no afectemos la instalación global de Python:

$ . bin/activate

Ahora instalemos el requests biblioteca con pip:

$ pip install requests

Crea un nuevo archivo llamado single_uploader.py que almacenará nuestro código. En ese archivo, comencemos por importar el requests biblioteca:

import requests

¡Ahora estamos listos para cargar un archivo! Al cargar un archivo, necesitamos abrir el archivo y transmitir el contenido. Después de todo, no podemos cargar un archivo al que no tenemos acceso. Haremos esto con el open() función.

los open() La función acepta dos parámetros: la ruta del archivo y el modo. La ruta del archivo puede ser una ruta absoluta o una ruta relativa al lugar donde se ejecuta el script. Si está cargando un archivo en el mismo directorio, puede usar el nombre del archivo.

El segundo argumento, modo, tomará el valor “leer binario” que está representado por rb. Este argumento le dice a la computadora que queremos abrir el archivo en modo lectura y que queremos consumir los datos del archivo en formato binario:

test_file = open("my_file.txt", "rb")

Nota: es importante leer el archivo en modo binario. los requests biblioteca normalmente determina el Content-Length encabezado, que es un valor en bytes. Si el archivo no se lee en modo bytes, la biblioteca puede obtener un valor incorrecto para Content-Length, lo que provocaría errores durante el envío del archivo.

Para este tutorial, realizaremos solicitudes al servicio httpbin gratuito. Esta API permite a los desarrolladores probar sus solicitudes HTTP. Creemos una variable que almacene la URL en la que publicaremos nuestros archivos:

test_url = "http://httpbin.org/post"

Ahora tenemos todo para hacer la solicitud. Usaremos el post() método del requests biblioteca para cargar el archivo. Necesitamos dos argumentos para que esto funcione: la URL del servidor y files propiedad. También guardaremos la respuesta en una variable, escribiremos el siguiente código:

test_response = requests.post(test_url, files = {"form_field_name": test_file})

los files la propiedad lleva un diccionario. La clave es el nombre del campo del formulario que acepta el archivo. El valor son los bytes del archivo abierto que desea cargar.

Normalmente para comprobar si su post() El método fue exitoso, verificamos el código de estado HTTP de la respuesta. Podemos usar el ok propiedad del objeto de respuesta, test_url. Si es cierto, imprimiremos la respuesta del servidor HTTP, en este caso, hará eco de la solicitud:

if test_response.ok:
    print("Upload completed successfully!")
    print(test_response.text)
else:
    print("Something went wrong!")

¡Probémoslo! En la terminal, ejecute su script con el python mando:

python single_uploader.py

Su salida sería similar a esto:

Upload completed successfully!
{
  "args": {}, 
  "data": "", 
  "files": {
    "form_field_name": "This is my filenI like my filen"
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "189", 
    "Content-Type": "multipart/form-data; boundary=53bb41eb09d784cedc62d521121269f8", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.25.0", 
    "X-Amzn-Trace-Id": "Root=1-5fc3c190-5dea2c7633a02bcf5e654c2b"
  }, 
  "json": null, 
  "origin": "102.5.105.200", 
  "url": "http://httpbin.org/post"
}

Como prueba de cordura, puede verificar el form_field_name el valor coincide con lo que hay en su archivo.

Carga de varios archivos con la biblioteca de solicitudes de Python

Cargar varios archivos mediante solicitudes es bastante similar a un solo archivo, con la principal diferencia en nuestro uso de listas. Crea un nuevo archivo llamado multi_uploader.py y el siguiente código de configuración:

import requests

test_url = "http://httpbin.org/post"

Ahora crea una variable llamada test_files eso es un diccionario con varios nombres y archivos:

test_files = {
    "test_file_1": open("my_file.txt", "rb"),
    "test_file_2": open("my_file_2.txt", "rb"),
    "test_file_3": open("my_file_3.txt", "rb")
}

Como antes, las claves son los nombres de los campos del formulario y los valores son los archivos en bytes.

También podemos crear nuestras variables de archivos como una lista de tuplas. Cada tupla contiene el nombre del campo de formulario que acepta el archivo, seguido del contenido del archivo en bytes:

test_files = [("test_file_1", open("my_file.txt", "rb")),
              ("test_file_2", open("my_file_2.txt", "rb")),
              ("test_file_3", open("my_file_3.txt", "rb"))]

Cualquiera de los dos funciona, así que elige el que prefieras.

Una vez que la lista de archivos esté lista, puede enviar la solicitud y verificar su respuesta como antes:

test_response = requests.post(test_url, files = test_files)

if test_response.ok:
    print("Upload completed successfully!")
    print(test_response.text)
else:
    print("Something went wrong!")

Ejecute este script con el python mando:

$ python multi_uploader.py

Verás esta salida:

Upload completed successfully!
{
  "args": {}, 
  "data": "", 
  "files": {
    "test_file_1": "This is my filenI like my filen", 
    "test_file_2": "All your base are belong to usn", 
    "test_file_3": "It's-a me, Mario!n"
  }, 
  "form": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "470", 
    "Content-Type": "multipart/form-data; boundary=4111c551fb8c61fd14af07bd5df5bb76", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.25.0", 
    "X-Amzn-Trace-Id": "Root=1-5fc3c744-30404a8b186cf91c7d239034"
  }, 
  "json": null, 
  "origin": "102.5.105.200", 
  "url": "http://httpbin.org/post"
}

¡Buen trabajo! Puede cargar archivos únicos y múltiples con requests!

Conclusión

En este artículo, aprendimos cómo cargar archivos en Python usando el requests biblioteca. Donde es un solo archivo o varios archivos, solo se necesitan algunos ajustes con el post() método. También verificamos nuestra respuesta para asegurarnos de que nuestras cargas fueron exitosas.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad