使用Python调用Confluence REST API上传附件遇415不支持媒体类型错误
Python调用Confluence REST API上传附件报415不支持媒体类型错误
问题详情
使用Python调用Confluence REST API上传附件时,持续收到415“不支持的媒体类型”错误。明确是Content-Type设置问题,但尝试多种类型后仍无法解决。
相关代码
import requests print("start....................") url = 'https://confluence.XXX.com/confluence/rest/api/content/' + str(108458915) + '/child/attachment/' TOKEN = 'XXXXXXXX' headers = {'X-Atlassian-Token': 'no-check', "Authorization": f"Bearer {TOKEN}" } #no content-type here! file = 'my_file.jpeg' content_type = 'multipart/form-data' files = {'file': (file, open(file, 'rb'), content_type)} print("request....................") r = requests.post(url, headers=headers, files=files, verify='confluence.XXX.crt') r.raise_for_status()
已尝试的Content-Type
image/jpegapplication/jsonapplication/xmlapplication/octet-streammultipart/form-data
错误信息
requests.exceptions.HTTPError: 415 Client Error: for url: https://confluence.XXX.com/rest/api/content/108458915/child/attachment/
解决方法
问题核心在于文件字段的Content-Type设置错误,以及对Confluence API请求格式的误解:
- 文件的Content-Type需匹配实际类型:上传的文件要使用对应格式的MIME类型(如JPEG用
image/jpeg),而非multipart/form-data——后者是整个请求的Content-Type,requests会自动处理,无需手动指定。 - 确保请求参数符合API要求:Confluence允许添加可选的附件注释等参数,同时必须保留
X-Atlassian-Token: no-check以绕过CSRF校验。
修改后的代码:
import requests print("start....................") # 简化URL拼接 url = f'https://confluence.XXX.com/confluence/rest/api/content/108458915/child/attachment/' TOKEN = 'XXXXXXXX' headers = { 'X-Atlassian-Token': 'no-check', "Authorization": f"Bearer {TOKEN}" } file_path = 'my_file.jpeg' # 为文件指定正确的MIME类型 files = { 'file': (file_path, open(file_path, 'rb'), 'image/jpeg') } # 可选:添加附件描述 data = {'comment': '上传图片附件'} print("request....................") # 发送请求,可选携带data参数 r = requests.post(url, headers=headers, files=files, data=data, verify='confluence.XXX.crt') r.raise_for_status()
关键注意事项
- 禁止手动设置请求的
Content-Type: multipart/form-data,否则会覆盖requests自动生成的带边界标识的请求头,导致Confluence无法解析请求。 - 可通过
mimetypes模块自动获取文件MIME类型(如mimetypes.guess_type(file_path)[0]),避免手动写错。 - 确认Bearer Token权限足够上传附件,且Confluence实例的API路径无误。
内容的提问来源于stack exchange,提问作者STF
相关产品推荐
相关产品推荐

