imgurpython调用create_album接口失败,报400请求体无法解码错误
问题描述
- 基于Python3的应用使用已停止维护的
imgurpython库,通过OAuth授权调用Imgur API实现批量上传图片并添加至隐藏相册,此前运行正常。近期使用时图片上传全部成功,但创建相册失败,报错:imgurpython.helpers.error.ImgurClientError: (400) Unable to decode request body - 已排除使用限制、敏感内容、限流等问题,多次重试均仅相册创建失败
- 修改
imgurpython后打印的请求详情:method_to_call: <function post at 0x1035b42c0> url: https://api.imgur.com/3/album header: { 'Authorization': 'Bearer [...]'}, data: { 'privacy': 'hidden', 'title': 'test' } - 已知
privacy字段已被弃用,但根据API文档尚未停止使用,错误响应:error: {'status': 400, 'success': False, 'data': {'error': 'Unable to decode request body', 'request': '/3/album', 'method': 'POST'}}
解决方案
核心原因
imgurpython库停止维护后,未跟进Imgur API的格式变更:当前创建相册的API要求请求体使用JSON格式,但imgurpython仍默认发送form-data格式的请求,导致服务端无法解码请求体。
修复方法
方法1:修改imgurpython库的请求逻辑
找到imgurpython库中发送POST请求的核心代码(通常在client.py的request方法内),将原有的表单数据提交方式改为JSON格式提交:
- 在请求头中添加
Content-Type: application/json - 将请求的
data参数替换为json参数
示例修改代码:
# 原代码可能类似 response = self.session.post(url, data=data, headers=headers) # 修改为 headers['Content-Type'] = 'application/json' response = self.session.post(url, json=data, headers=headers)
方法2:绕过imgurpython,直接使用requests库调用API
如果不想修改第三方库,可直接用requests发送符合要求的请求:
import requests # 替换为你的OAuth令牌 auth_token = "YOUR_BEARER_TOKEN" api_url = "https://api.imgur.com/3/album" headers = { "Authorization": f"Bearer {auth_token}", "Content-Type": "application/json" } # 请求数据,若privacy字段失效可尝试替换为visibility字段 payload = { "title": "test", "privacy": "hidden" } response = requests.post(api_url, json=payload, headers=headers) print(response.json())
额外提示
若修改格式后仍报错,可尝试将privacy字段替换为visibility字段(即使文档未更新,API可能已实际切换该字段),取值保持hidden即可。
内容的提问来源于stack exchange,提问作者gorby
相关产品推荐
相关产品推荐

