首页 > 解决方案 > 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 的文档。

标签: python-3.xrestpython-requests

解决方案


数据是 Base64 编码的,赠品是在数据字符串的末尾有签名=符号

简单地这样做就产生了预期的结果

import base64

data = resp.json()['Data']
decoded_data = base64.b64decode(data)
print(decoded_data)

推荐阅读