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

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格式提交:

  1. 在请求头中添加Content-Type: application/json
  2. 将请求的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:12:37