如何在使用负载时避免空格

问题描述 投票:0回答:1

我正在尝试使用此有效负载将其传递到 python post 请求中。然而,在执行此操作时,它会发送字段之间带有空格的有效负载。这导致了 http 400。如何在 python 中避免这种情况。

payload = {"start_time":f"{start}","end_time":f"{end}","filter":{"site":f"{site}","element":f"{elementid}"},"interval":"5min","metrics":[{"name":"CPUUsage","statistics":["max"],"unit":"percentage"}],"view":{"summary":True},}
print("payload data: ", payload)

输出:

payload data:  {'start_time': '2024-09-19T16:29:37.607', 'end_time': '2024-09-19T16:24:37.607', 'filter': {'site': '16970975636546', 'element': '1569874521567'}, 'interval': '5min', 'metrics': [{'name': 'CPUUsage', 'statistics': ['max'], 'unit': 'percentage'}], 'view': {'summary': True}}

我不需要有效负载输出中的任何空格。


    def get_sys_metrics(self):
# has to be called immediately after bearer token
        api_endpoint = "/sdwan/monitor/v2.3/api/monitor/sys_metrics"
        full_url = f"{self.api_sase_url}{api_endpoint}"
        url = "https://api.sase.paloaltonetworks.com/sdwan/monitor/v2.3/api/monitor/sys_metrics"
# read the file for site and element ids
        with open("elements_id.json", "r", encoding='utf-8') as site_element_id:
            d = json.load(site_element_id)
            payloads = []
            for i in d:
                site = i["site_id"]
                elementid = i["element_id"]
                payload = {"start_time":f"{start}","end_time":f"{end}","filter": {"site":f"{site}","element":f"{elementid}"},"interval":"5min","metrics":[{"name":"CPUUsage","statistics":["max"],"unit":"percentage"}],"view":{"summary":True},}
                print("+++++++", payload)
                payloads.append(payload)
# Pass the headers to request body
        headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {self.bearer_token}",
        }
# POST request
        for payload in payloads:
            response = requests.post(url, headers=headers, json=payload, verify=False)
            print(response.json())

prisma_obj = PrismaAccess("token", client_id, client_secret, tsg_id)
prisma_obj.get_bearer_token()
elements = prisma_obj.get_sys_metrics()
#Print the metrics
print(elements)
python rest
1个回答
0
投票

该问题与字典中的空格无关。问题是您发送 POST 请求的服务器要求

payload["filter"]["element"]
的值是数组,而不是字符串。我不确定服务器是否期望该数组是
elementid
的列表或字节数组。这取决于服务器的要求。 尝试在将值分配给变量之前使用它
payload

elementid = list(elementid)
© www.soinside.com 2019 - 2024. All rights reserved.