Запрос HTTP для файла CSV выдает строку символов - как мне декодировать? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть API, к которому я обращаюсь, используя пакет python requests. Когда запрашиваемый набор данных превышает внутренний предел размера, стандартная конечная точка возвращает ошибку, а код ответа указывает на использование их конечной точки «экспорта», которая вместо этого обслуживает 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.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Данные закодированы в Base64, раздача в том, что в конце строки данных есть подпись = знак

, простое выполнение которого дало ожидаемые результаты

import base64

data = resp.json()['Data']
decoded_data = base64.b64decode(data)
print(decoded_data)
0 голосов
/ 25 апреля 2020

Похоже, что файл неправильно декодируется.

Какой метод декодирования вы используете? Можете ли вы предоставить код, который вы используете для запроса?

...