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

    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.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *