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

如何使用python requests正确登录reddit账号?

Reddit 非Praw原生Python登录实现方案

核心注意事项

  • 必须使用同一个requests.Session实例处理CSRF获取和登录请求,Reddit会将CSRF token与会话Cookie绑定,跨会话的token会直接校验失败
  • 请求头必须配置自定义User-Agent,Reddit会拦截默认的python-requests/xxx标识的请求
  • 登录POST参数必须包含csrf_token、username、password三个必填项,开启两步验证的账号需要额外传入otp字段填6位验证码

完整可运行代码

import requests

# 初始化会话,全程使用同一个实例维持状态
session = requests.Session()
# 替换为自定义User-Agent,推荐格式:<平台>:<应用名>:<版本号> (by /u/你的Reddit用户名)
session.headers.update({
    "User-Agent": "windows:my_reddit_tool:v1.0 (by /u/test_user)"
})

# 第一步:获取CSRF Token
csrf_response = session.get("https://www.reddit.com/login")
# 从HTML中提取csrf_token,你也可以用BeautifulSoup等解析库实现
csrf_token = csrf_response.text.split('name="csrf_token" value="')[1].split('"')[0]

# 第二步:提交登录请求
login_params = {
    "csrf_token": csrf_token,
    "username": "你的Reddit用户名",
    "password": "你的Reddit密码"
    # 开启两步验证的账号取消注释下行,填入动态验证码
    # "otp": "123456"
}
login_response = session.post(
    "https://www.reddit.com/login",
    data=login_params,
    allow_redirects=True
)

# 第三步:校验登录是否成功
# 直接请求用户信息接口,是最可靠的校验方式
profile_resp = session.get("https://www.reddit.com/api/v1/me")
if profile_resp.status_code == 200:
    user_info = profile_resp.json()
    print(f"登录成功,当前用户:{user_info['name']},账号注册时间:{user_info['created_utc']}")
else:
    print(f"登录失败,返回状态码:{profile_resp.status_code},错误信息前200字符:{profile_resp.text[:200]}")

校验逻辑说明

不要通过登录请求的状态码判断结果,Reddit登录失败时也会返回200跳转页,调用/api/v1/me接口是官方认可的校验方式:返回200且能解析到用户字段即为登录有效,返回403说明登录状态未生效。

常见问题排查

  • 提交登录后返回403:优先检查CSRF Token是否和当前会话匹配,User-Agent是否为自定义格式
  • 提示凭证无效:确认账号密码正确,开启两步验证的账号是否传入了正确的otp验证码
  • 多次请求后登录失败:触发Reddit频率限制,等待10-15分钟后再测试即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:57:02