python-3.x - CSV 文件的 HTTP 请求产生一串字符 - 我如何解码?
问题描述
我有一个使用 pythonrequests
包访问的 API。当请求的数据集超过内部大小限制时,标准端点将返回失败,并且响应代码指示使用它们的“导出”端点,该端点提供 CSV。
但是,在我看来,返回的 CSV 数据是一个编码字符串。
这是输出示例(修剪以显示开始和结束)
{"Data":"VGVybWluYWwgTnVtsQ2FsZW5kYXIgVGltZSxUcmFuc2FjdGlvbiBUeXBlLE...GhvbGRlciB0cmFuc2FjdGlvbiIsIkRlbmllZCI="}
到目前为止,我尝试的是提取字符串,然后尝试各种编码/解码组合,但没有产生人类可读的 CSV。
响应头是:
{'Content-Length': '556895',
'Content-Type': 'application/json; charset=utf-8',
'Server': 'Microsoft-HTTPAPI/2.0',
'Date': 'Fri, 24 Apr 2020 17:13:31 GMT'}
这个事情谁有经验?我期望一个字节字符串或字节数组,但这只是一个 utf-8 字符串。
如果这是我忽略的简单事情,或者我遗漏了重要信息,我深表歉意。
编辑:我的请求如下所示:
api = myAPIObject()
api.authenticate(username, passwd)
CR_ID = 5341345
res = requests.post(api.CR_export_url,
headers=api.auth_header,
data={'ID': CR_ID,
'ExportFormat': 'CSV',
'ShouldIncludeHeaders':True})
这是根据 api 的文档。
解决方案
数据是 Base64 编码的,赠品是在数据字符串的末尾有签名=
符号
简单地这样做就产生了预期的结果
import base64
data = resp.json()['Data']
decoded_data = base64.b64decode(data)
print(decoded_data)
推荐阅读
- java - 为 FeignClient RetryableException 设置 HTTP 状态
- c# - datagridview 单元格相乘并求和文本框中的列
- service-reference - 服务引用上的 C# 中的 FakeItEasy
- linux - VS Code 无法正确响应 Linux Mint 中的键盘切换?
- java - 是否可以在没有嵌套循环的情况下读取整个 XML 文件
- css - 如何覆盖从 ui-include 生成的 div 类
- snowflake-cloud-data-platform - 通过 snlowsql 复制到命令时加载 csv 文件时出错
- php - 当 URl 存在时,Strrpos 无法正常工作
- java - spring boot - undertow https 会话不会过期或停止 ssl 握手
- javascript - 使用鼠标拖动时通过 JavaScript 切换 CSS 类时出现错误或错误