Я пытаюсь загрузить вложения к электронному письму, в котором отчеты DMARC поступают из домена, я загружаю их с помощью API Gmail. Согласно документации API, файл загружается через строка в кодировке base64, которую я получаю правильно «по-видимому», но когда я пытаюсь декодировать эту строку с помощью Python, чтобы получить файл, я получаю сообщение об ошибке, в котором говорится, что строка base64 не распознается как действительная строка, и возможно, что это поврежден.
Чтобы исключить слишком длинную цепочку, я попробовал загрузить ее по частям, а затем присоединиться к ней, но ошибка сохраняется.
Прикрепляю код, который использую и возвращаемая ошибка:
(Строка base64 — это всего лишь пример)
Код: Выделить всё
import base64
import gzip
import io
# Base64 encoded gzip file
base64_gzip = "H4sIAAAAAAAAAKVTuW7cMBCt118RuJcoyl5bCzB0XKRMUrhLI1DUaJexeICkNsfXh5f2MIw0aSTOe6N584Yj8vRLzh-OYJ3Q6uMtrpvbJ3pDJoBxYPyV3mxIIWlTY4LWIOAWjLa-l-DZyDwL0IZou- 8Vk0Cfvzx___a1evn8QtAJjBkgmZip0c5L5jzYT0yyP1o5cDXXkqDMx8xSX4x07PCWtVtc8 YHz6v6ha6odG6AadtDhu2FiO94SdM6PX4eWoLdM7ZPshgywF4riR_zYdg_3TUNQRhIJakzUX SAjFeNYBF1VOUlcWCZGz4L_7s0yzMIdoIjr4EJRoSbtYM7GChZpNr4KSR1B-ZAgZ6aExHcEDLXwA7gnyKTYnQGXEcM9xbHbeIjApGmIwjO2-k5fYaJc29yh1T-zdacXy6EXhrbNru62dYu7ehv GeSZSHteLCnoE5UPCigYc2byEQaXK0b1w4X6Fj3uitILg_QIpOdG4YS5YXmeQTE4FLGM4G7kSCTeR-ydiBOXFJMJarld5hFkb6Cer5fUNXFMp-wBsBPtO7iWRBN8IEbb4Q2_BLbMvyhc-_n3_abfjh8V rCbLdUxWyjuC_yq3rhN70G9PyMoSNWX_2v5P8j0QNBAAA"
# Ensure the base64 string has the correct padding
missing_padding = len(base64_gzip) % 4
if missing_padding:
base64_gzip += '=' * (4 - missing_padding)
# Decode the base64 string
decoded_gzip = base64.b64decode(base64_gzip)
# Decompress the gzip file
with gzip.GzipFile(fileobj=io.BytesIO(decoded_gzip)) as f:
decompressed_data = f.read().decode('utf-8')
decompressed_data
Код: Выделить всё
---------------------------------------------------------------------------
Error Traceback (most recent call last)
Cell In[2], line 14
11 base64_gzip += '=' * (4 - missing_padding)
13 # Decode the base64 string
---> 14 decoded_gzip = base64.b64decode(base64_gzip)
16 # Decompress the gzip file
17 with gzip.GzipFile(fileobj=io.BytesIO(decoded_gzip)) as f:
File /usr/local/lib/python3.11/base64.py:88, in b64decode(s, altchars, validate)
86 assert len(altchars) == 2, repr(altchars)
87 s = s.translate(bytes.maketrans(altchars, b'+/'))
---> 88 return binascii.a2b_base64(s, strict_mode=validate)
Error: Incorrect padding
- Я попробовал загрузить строку base64 из API по частям, чтобы исключить повреждение строки в ответе API.
< li>Я пробовал использовать другую библиотеку декодирования (binascii), чтобы исключить ошибки с библиотекой base64. - Я даже пробовал закодировать файл вручную (но меньшего размера), отправив его через почтовый ящик, который я использую, загружая его через запрос API и декодируя его с помощью того же кода, и мне это удалось. Это может указывать на то, что, возможно, строка, полученная из других файлов, действительно повреждена, но я не знаю, в чем причина.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ith-the-gm