调用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
相关产品推荐
相关产品推荐

