Python调用Anaplan API返回gzip响应无法正常读取如何解决
问题根因
你拿到的二进制返回结果开头PK\x03\x04是ZIP格式的标准标识,结合内容里的[Content_Types].xml、xl/sharedStrings.xml等特征,说明Anaplan API返回的是XLSX格式的Excel文件(XLSX本质是ZIP压缩包)。
响应头的Content-Encoding: gzip是传输层压缩,requests默认会自动处理,你打印的r.content已经是解压后的原始文件内容,不是乱码。
解决方案
1. 直接保存到本地
import requests url = f'https://api.anaplan.com/2/0/workspaces/{workspace}/models/{model}/files/{fileId}/chunks/0' headers = { 'Authorization': f'AnaplanAuthToken {keys["tokenInfo"]["tokenValue"]}' # GET请求无需携带Content-Type请求头,可删除冗余配置 } r = requests.get(url, headers=headers) r.raise_for_status() # 直接写入二进制内容为xlsx文件 with open("anaplan_export.xlsx", "wb") as f: f.write(r.content)
写入完成后即可用Excel直接打开查看内容。
2. 内存直接读取无需存盘
如果需要直接在Python中处理文件内容,可通过字节流读取:
import pandas as pd from io import BytesIO # 接上述请求代码 excel_stream = BytesIO(r.content) # 读取Excel第一个工作表,可按需调整参数 df = pd.read_excel(excel_stream, engine="openpyxl") print(df.head())
补充说明
如果导出的文件体积较大被分为多个chunk,需要按顺序请求所有chunk的内容拼接完整后,再执行保存或读取操作,仅解析单个chunk会得到损坏的文件。
内容的提问来源于stack exchange,提问作者mxmlnlrcn
相关产品推荐
相关产品推荐

