我正在尝试使用此有效负载将其传递到 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)
该问题与字典中的空格无关。问题是您发送 POST 请求的服务器要求
payload["filter"]["element"]
的值是数组,而不是字符串。我不确定服务器是否期望该数组是 elementid
的列表或字节数组。这取决于服务器的要求。
尝试在将值分配给变量之前使用它payload
elementid = list(elementid)