You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python调用Basecamp 3 API向Campfire上传图片?

解决Basecamp 3 API上传图片到Campfire的问题

你遇到的400错误主要来自两个核心问题:附件上传时硬编码了错误的Content-Length,以及发送Campfire消息时请求体格式不符合API要求。以下是具体修正方案:

错误分析

  • 硬编码Content-Length:你把Content-Length写死为123,这和实际图片文件大小不匹配,会导致附件上传请求异常。
  • Campfire消息格式错误:Basecamp要求发送带附件的Campfire消息时,必须指定type为Forward,且content是包含attachable_sgid的对象,而非直接传入sgid字符串。
  • 手动拼接JSON风险:手动拼接JSON字符串容易出现转义错误,建议直接使用requests的json参数自动处理序列化。

修正后的代码

import requests
import os

access_token = '你的token'
account_id = "5437964"
project_id = "29141823"
campfire_id = "5288317671"
base_url = f"https://3.basecampapi.com/{account_id}"

# 1. 上传附件获取attachable_sgid
file_path = "img.png"
attachments_url = f"{base_url}/attachments.json?name={os.path.basename(file_path)}"

# 动态计算实际文件大小,替换硬编码值
file_size = os.path.getsize(file_path)
img_headers = {
    'Authorization': f'Bearer {access_token}',
    "Content-Type": "image/png",
    "Content-Length": str(file_size)
}

with open(file_path, "rb") as img_content:
    response = requests.post(attachments_url, headers=img_headers, data=img_content)
    response.raise_for_status()  # 检查附件上传是否成功,失败则抛出异常
    attachable_sgid = response.json()['attachable_sgid']

# 2. 发送带附件的Campfire消息
campfire_url = f"{base_url}/buckets/{project_id}/chats/{campfire_id}/lines.json"
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json",
}

# 符合API要求的请求体结构
payload = {
    "type": "Forward",
    "content": {
        "attachable_sgid": attachable_sgid
    }
}

response = requests.post(campfire_url, headers=headers, json=payload)
response.raise_for_status()  # 检查消息发送是否成功
print("图片上传到Campfire成功")

关键修改说明

  • 动态计算文件大小:使用os.path.getsize()获取实际文件大小,确保请求头和上传内容的大小匹配。
  • 规范消息结构:指定type为Forward,并将attachable_sgid嵌套在content对象中,完全符合Basecamp 3 API的要求。
  • 自动处理JSON序列化:通过requests.post(..., json=payload)自动完成JSON转换,避免手动拼接字符串的转义错误。
  • 添加异常检查:使用response.raise_for_status()在请求失败时直接抛出异常,便于快速定位问题。

内容的提问来源于stack exchange,提问作者mare011

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:48:25