如何使用Python Requests获取Dynatrace API的CSV格式结果?
正确获取Dynatrace API的CSV格式输出
你的问题出在两个核心点:请求头字段拼写错误,以及用了错误的方式解析返回内容。以下是具体修正方案:
关键修正项
- 修正请求头字段:HTTP标准的接受格式字段是
Accept,你写的Accepts是拼写错误,这会导致API忽略你对CSV的偏好,大概率返回默认的JSON格式。 - 改用文本方式获取内容:CSV是纯文本结构,不能用
resp.json()解析,直接用resp.text就能拿到原始的逗号分隔文本。
修正后的完整代码
import requests headers = { "Authorization": "API-Token XXX", # 修正字段名,明确指定接受CSV(也可以保留权重设置:"text/csv, application/json; q=0.1",但字段名必须是Accept) "Accept": "text/csv" } url = "https://dynatrace.glb.platform.dxc.com:443/e/xxx/api/v2/metrics/query?metricSelector=(builtin:host.cpu.usage:splitBy(dt.entity.host):avg):limit(2):names&from=2024-11-11T00:10:00Z&to=2024-11-17T23:55:00Z&resolution=Inf" resp = requests.get(url, headers=headers, timeout=10) # 可选:检查请求是否成功,失败则抛出异常,方便排查问题 resp.raise_for_status() # 获取CSV格式的文本内容 csv_data = resp.text # 直接打印输出CSV内容 print(csv_data) # 或者保存到本地CSV文件 with open("dynatrace_cpu_metrics.csv", "w", encoding="utf-8") as file: file.write(csv_data)
兼容场景处理(可选)
如果需要同时兼容CSV和JSON返回(比如API在某些情况下不支持CSV),可以把Accept头设为"text/csv, application/json; q=0.1",然后先判断响应类型再选择解析方式:
if resp.headers.get("Content-Type") == "text/csv": csv_data = resp.text else: json_data = resp.json()
内容的提问来源于stack exchange,提问作者vijay kaali
相关产品推荐
相关产品推荐

