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

调用Discogs API获取图片URL后请求返回403错误的求助

解决Discogs图片URL请求403状态码问题

问题原因

Discogs的图片资源启用了防盗链机制,默认拒绝无合法身份标识的程序请求。你的代码中直接请求图片URL时未携带任何身份标识头(比如User-Agent),被服务器判定为非合法访问,因此返回403状态码。另外原API请求URL的参数格式存在错误(逗号分隔key和secret,应改为&),虽然当前能获取数据,但可能引发后续认证问题。

解决方案

  • 给图片请求添加符合规范的User-Agent头,模拟正常客户端访问,建议使用Discogs官方推荐的应用标识格式,或常见浏览器UA字符串
  • 修正API请求URL的参数分隔符,确保认证参数正常生效

修改后的代码

import requests
from PIL import Image
from io import BytesIO
import json

def getDetails(albumid):
    # 修正API URL的参数分隔符,逗号改为&
    url = f"https://api.discogs.com/masters/{albumid}?key=hidden&secret=hidden"  
    response = requests.get(url)
    data = response.json()

    with open("Ex1.json",'w') as file:
        json.dump(data,file,indent=6)

    try:
        image_url = data['images'][0]['uri']
        # 添加请求头,使用合法的User-Agent
        headers = {
            'User-Agent': 'YourAppName/1.0 (+https://yourwebsite.com)'  # 替换为你的应用信息
            # 也可使用浏览器UA:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
        }
        x = requests.get(image_url, headers=headers)
        print(image_url)

        if x.status_code == 200:
            img = Image.open(BytesIO(x.content))  # 修正:传入response的二进制内容而非对象本身
            return img
        else:
            print(f"获取图片失败,状态码{x.status_code}")
            
    except (KeyError, IndexError) as e:
        print(f"获取图片时出错: {e}")

注意事项

  • User-Agent尽量使用官方推荐的格式,避免被Discogs限制访问频率
  • 遵守Discogs的API使用条款,不要过度请求图片资源,防止触发限流机制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:17:06