使用Python requests调用Reddit API返回429 Too Many Requests错误如何解决
错误触发原因
429 Too Many Requests 是Reddit API触发速率限制后的标准返回,核心原因如下:
- 最常见的原因是请求未携带自定义
User-Agent头:Reddit API规则明确要求所有请求必须携带可识别的User-Agent标识,requests库默认的User-Agent格式为python-requests/[版本号],会被Reddit直接判定为恶意爬虫,哪怕是首次请求也会直接返回429 - 短时间内请求频次超出阈值:未授权的匿名请求本身速率限制极严,哪怕带了UA,短时间内多次请求也会触发拦截
可行解决方法
- 优先添加自定义
User-Agent头,可使用浏览器UA或者包含你个人标识的自定义UA,修改后的参考代码如下:
def main(): import requests headers = { # 可替换为你自己的标识,格式参考:<应用名>/<版本号> (by <你的Reddit用户名>) "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" } api = requests.get('https://www.reddit.com/r/memes.json', headers=headers) data = api.content print(data) if __name__ == "__main__": main()
- 控制请求频率:匿名请求建议至少间隔2秒发送一次,避免触碰速率阈值
- 如需高频调用,注册Reddit开发者账号创建应用,获取OAuth2授权凭证后发起请求,带授权的请求速率限制可放宽至每分钟60次
- 增加重试逻辑:捕获429状态码,按指数退避规则等待一段时间后再重试,避免直接高频重试导致IP被临时封禁
内容的提问来源于stack exchange,提问作者MyName
相关产品推荐
相关产品推荐

