Как мне загрузить PDF-файл, используя python запросов, когда контент возвращается в объекте json? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь загрузить PDF-файл с помощью библиотеки запросов, и после того, как я отправлю запрос на публикацию, я получаю обратно объект json. json форматируется следующим образом:

{content: 'all_of_the_content',
contentType: 'application/pdf',
fileName: 'the_name_of_the_file.pdf'}

Содержимое составляет около 388000 байт. Как мне сохранить содержимое в PDF-файл? Пока пробовал

with open('file.pdf', 'wb') as f:
    f.write(bytes(response.json()['content'], 'utf-8'))

with open('file.pdf', 'w') as f:
    f.write(response.json()['content'])

# These were desperation
with open('file.pdf', 'wb') as f:
    f.write(response.content)

with open('file.pdf', 'w') as f:
    f.write(response.text)

Возможная полезная информация. Возвращаемое json идентично json, которое возвращается при просмотре ответа в chrome инструментах разработчика, а фактическая ошибка, которую выдает Adobe: «Не удалось открыть файл. Это либо неподдерживаемый тип файла. или из-за того, что файл был поврежден (например, он был отправлен в виде вложения электронной почты и неправильно декодирован) "Snip of response preview after post request. Left out fileName due to privacy concerns

1 Ответ

0 голосов
/ 05 мая 2020

Я разобрался. Оказывается, это кодировка base64. Поэтому сначала мне пришлось преобразовать строку содержимого в байты, а затем декодировать ее с помощью модуля codec s.

content = bytes(response.json()['content'], 'utf-8')
with open("test.pdf", "wb") as f:
    f.write(codecs.decode(content, "base64"))

Проверьте свои кодировки!

...