Trello API-400:发布多部分文件附件时出现“解析正文错误”

时间:2018-07-19 15:04:21

标签: python python-requests trello

我正在尝试使用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
  • 完全省略attachmentPOST删除没有关联数据的文件
  • 在请求参数中添加stream = True(对于上传似乎无关紧要,但是我认为尝试使用它不会感到受伤)
  • 将文件编码为base64(此编码在其他地方是必需的;我正忙于吸管)
  • 将文件编码为base64,并结合上述对data / json / params的调整

注意:PDF文件可能是问题的根源-它是通过​​将多个图像转换为PDF格式,然后将它们与pdfunite连接而生成的,所以我很可能会犯错在创建过程中导致Trello拒绝文件。似乎可以确认的是,对Trello "Error parsing body"进行谷歌搜索会返回两个匹配,其中只有一个与Trello有关,而没有一个有用。这使我认为这是一条特别奇怪/罕见的错误消息,对我来说意味着我对文件进行了某种严重的错误编码。

但是,PDF文件在我(和我的同事)系统上正确打开,没有任何错误消息,工件或其他奇怪行为。更重要的是,使用其他“已知良好”的PDF尝试执行此操作也将失败,并带有相同的错误代码。因为文件的内容在“公司财产/信息”的范围之内,所以我希望避免发布它(和/或原始请求正文),但是如果达成共识,它将引起问题,我会这样做。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:Content-Type标头设置错误,因为在发送上载请求时,会话范围的设置(Session.headers.update({"Content-Type": "application/json"}))覆盖了multipart/form-data标头。这导致Trello拒绝了尸体。我通过删除会话级标头解决了问题,该标头允许requests修改每个请求的内容类型。