Я пытаюсь загрузить PDF-файл в виде вложения на карточку Trello, используя python-requests
. Мне не удалось получить запрос в функции ниже, чтобы вернуть что-либо, кроме 400: Error parsing body
, несмотря на значительные изменения (подробно описанные ниже).
Я должен отметить, что я могу создавать карты и добавлять к ним вложения URL (ни одно из них не требует загрузки файла) без каких-либо проблем.
Вот код, который обрабатывает POST файла:
def post_pdf(session, design, card_id):
attachment = {
"name": design["campaign_title"] + " - Combined PDF",
"mimeType": "application/pdf"
}
pdf_post = session.post(
url = "https://api.trello.com/1/cards/" + card_id + "/attachments",
files = {"file": open("combined_pdf.pdf", "rb")},
data = attachment
)
Ключ аутентификации и токен устанавливаются в параметрах сеанса при создании сеанса, поэтому они здесь не добавляются.
Кроме того, в реальном коде POST
обрабатывается функцией-оболочкой, которая добавляет некоторую стандартную проверку ошибок и ограничение скорости запроса, а также более подробные дампы ошибок при сбое запроса, но я подтвердил (в приведенный выше пример), что та же ошибка сохраняется без оболочки.
Корректировки, которые я пробовал
- Замена
data = attachment
наjson = attachment
- Замена
data = attachment
наparams = attachment
- Полное отсутствие
attachment
иPOST
создание файла без связанных данных - Добавление
stream = True
к параметрам запроса (похоже, это не имеет значения для загрузок, но я решил, что попробовать не помешает) - Кодирование файла как
base64
(эта кодировка требовалась в другом месте, я хватался за соломинку) - Кодирование файла как
base64
в сочетании с вышеуказанными настройками доdata
/json
/params
Примечание. Файл PDF потенциально является источником проблемы. Он создается путем преобразования нескольких изображений в формат PDF и последующего объединения их с помощью pdfunite
, поэтому я вполне мог допустить ошибки при его создании, из-за которых Trello чтобы отклонить файл. Кажется, это подтверждается тем, что поиск в Google по запросу Trello "Error parsing body"
возвращает два результата, только один из которых касается Trello, и ни один из них не является полезным. Это наводит меня на мысль, что это особенно странное/редкое сообщение об ошибке, которое для меня означает, что я допустил какую-то серьезную ошибку при кодировании файла.
Однако файл PDF правильно открывается в моей системе (и в системе моих коллег) без каких-либо сообщений об ошибках, артефактов или других странных действий. Что еще более важно, попытка сделать это с другими «заведомо исправными» PDF-файлами также не увенчается успехом с тем же кодом ошибки. Поскольку содержимое файла не выходит за рамки «собственности/информации компании», я бы не хотел публиковать его (и/или необработанный текст запроса), но я сделаю это, если есть согласие, что это вызывает проблему.