es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Lea un archivo CSV y realice una solicitud HTTP POST desde cada línea con Python.

Tengo un archivo CSV que quiero leer línea por línea y emparejar el encabezado con el valor para hacer una petición HTTP POST a un servidor web. Aquí tienes un ejemplo de un archivo CSV:

"Nombre del artículo","SO","Número de serie","Etiqueta de activo","Fabricante","Nombre del modelo","Número de modelo","Categoría","IP","Estado"
"MIORDENADOR","Microsoft Windows 10 Pro","ALGO","ALGO","Dell","Latitude","5420","Escritorio","0.0.0.0","Listo"

Aquí está mi código en Python:

import requests
import csv
import time
import pandas as pd

url = "https://develop.snipeitapp.com/api/v1/hardware"

headers= {
    "Accept": "application/json",
    "Content-Type": "application/json"
}

df = pd.read_csv('IMPORT.csv')
for idx, data in df.iterrows():
    payload = {
        "status_id": data['Estado'],
        "model_id": data['Número de modelo'],
        "name": data['Nombre del artículo'],
        "model_name": data['Nombre del modelo'],
        "serial": data['Número de serie'],
        "os": data['SO'],
        "manufacturer": data['Fabricante'],
        "ip": data['IP'],
        "Category": data['Categoría']
    }

    response = requests.request("POST", url, json=payload, headers=headers)

Pero quiero hacer una petición POST para cada línea en un archivo CSV con los valores que coincidan con el encabezado por campo de carga, si eso tiene sentido.

ACTUALIZACIÓN
He actualizado mi código en esta publicación y ahora obtengo este error:

TypeError: Object of type set is not JSON serializable

¡Gracias de antemano!
Un saludo, Max

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el error TypeError: El objeto de tipo set no se puede serializar a JSON, necesitas cambiar las comas en el diccionario de carga útil por dos puntos.

    Aquí tienes el código actualizado:

    import requests
    import csv
    import time
    import pandas as pd
    
    url = "https://develop.snipeitapp.com/api/v1/hardware"
    
    headers= {
        "Accept": "application/json",
        "Content-Type": "application/json"
    }
    
    df = pd.read_csv('IMPORT.csv')
    for idx, data in df.iterrows():
        payload = {
            "status_id": data['Status'],
            "model_id": data['Model Number'],
            "name": data['Item Name'],
            "model_name": data['Model Name'],
            "serial": data['Serial Number'],
            "os": data['OS'],
            "manufacturer": data['Manufacturer'],
            "ip": data['IP'],
            "Category": data['Category']
        }
        response = requests.request("POST", url, json=payload, headers=headers)
    

    ¡Espero que esto sea de ayuda! Hazme saber si tienes alguna pregunta adicional.

Comments are closed.