Python Trello API-400:“;分析正文时出错“;发布多部分文件附件时

Python Trello API-400:“;分析正文时出错“;发布多部分文件附件时,python,python-requests,trello,Python,Python Requests,Trello,我正在尝试使用python请求将PDF作为附件上传到Trello卡。我无法在下面的函数中请求返回除400:Error parsing body之外的任何内容,尽管进行了重大调整(详情如下) 我应该注意的是,我能够创建卡片并向它们添加URL附件(这两个都不需要上传文件),而没有任何问题 以下是处理文件POST的代码: def post_pdf(session, design, card_id): attachment = { "name": design["camp

我正在尝试使用
python请求
将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
  • 完全省略
    附件
    ,并且
    发布
    在没有相关数据的情况下删除文件
  • stream=True
    添加到请求参数(这似乎对上传不重要,但我认为尝试一下也无妨)
  • 将文件编码为
    base64
    (这种编码在其他地方是必需的;我正在抓救命稻草)
  • 将文件编码为
    base64
    ,并结合上述对
    数据的调整
    /
    json
    /
    参数

注意:PDF文件可能是问题的根源-它是通过将多个图像转换为PDF格式,然后将它们与
pdfunite
连接而生成的,因此我很可能在创建过程中出错,导致Trello拒绝该文件。似乎可以证实这一点的是,谷歌搜索
Trello“错误解析体”
会返回两个点击,其中只有一个涉及Trello,而且两个都没有用。这让我觉得这是一条特别奇怪/罕见的错误消息,这对我来说意味着我在编码文件时犯了某种严重的错误


但是,PDF文件在我(和我的同事)的系统上正确打开,没有任何错误消息、工件或其他奇怪行为。更重要的是,使用其他“已知良好”PDF尝试此操作也会失败,错误代码相同。由于该文件的内容属于“公司财产/信息”的范围,我希望避免发布它(和/或原始请求主体),但如果一致认为是它造成了问题,我会这样做

我找到了解决方案:
内容类型
标头设置不正确,因为在发送上载请求时,会话范围的设置(
session.headers.update({“Content Type”:“application/json”})
覆盖了
多部分/表单数据
标头。这导致特雷罗拒绝了尸体。我通过删除会话级标题解决了这个问题,该标题允许
请求
修改每个请求的内容类型