【发布时间】:2018-12-27 18:59:00
【问题描述】:
我正在尝试使用python-requests 将 PDF 作为附件上传到 Trello 卡片。尽管进行了重大调整(详见下文),但我无法在下面的函数中获得返回 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和POSTing 没有关联数据的文件 - 将
stream = True添加到请求参数(这对于上传似乎无关紧要,但我认为尝试不会有什么坏处) - 将文件编码为
base64(此编码已在其他地方需要;我正抓紧救命稻草) - 将文件编码为
base64,结合上述调整为data/json/params
注意: PDF 文件可能是问题的根源 - 它是通过将多个图像转换为 PDF 格式然后将它们与 pdfunite 连接生成的,所以我很可能在它的导致 Trello 拒绝文件的创建。似乎证实了这一点的是,谷歌搜索Trello "Error parsing body" 返回两个点击,其中只有一个与 Trello 相关,而且都没有用。这让我认为这是一个特别奇怪/罕见的错误消息,这对我来说意味着我在编码文件时犯了某种严重的错误。
但是,PDF 文件在我(和我同事的)系统上正常打开,没有任何错误消息、伪影或其他奇怪行为。更重要的是,尝试使用其他“已知良好”的 PDF 也会失败,错误代码相同。因为文件的内容属于“公司财产/信息”的范围,我想避免发布它(和/或原始请求正文),但如果同意它导致问题,我会这样做。
【问题讨论】:
标签: python python-requests trello