Python requests请求replit登录报403 缺少X-Requested-With头问题
Python requests登录Replit 403及reCAPTCHA问题排查方案
1. 初始403报错(提示缺失X-Requested-With头)修复点
- 传参方式错误:代码里用
auth=(email, password)传账号密码是无效的,Replit登录接口不支持HTTP Basic认证方式,账号密码需要放在POST请求体中提交,而不是通过auth参数构造认证头。 - 缺失强制校验的请求头:除了报错明确提示的
X-Requested-With: XMLHttpRequest(用来标识AJAX异步请求),还需要补齐以下和真实浏览器一致的请求头,否则会被WAF直接拦截:User-Agent:替换requests默认的python-requests/版本号标识,用主流桌面浏览器的UA值Referer:值设置为https://replit.com/login,标记请求来源为登录页面Content-Type:和你提交参数的格式匹配,传JSON参数就设为application/json,传表单参数就设为application/x-www-form-urlencoded
- 必须使用
requests.Session()对象发起请求,保持请求过程中的cookie一致,否则即使登录参数正确,后续请求也会因为没有会话凭证被拦截。 - 不要只传账号密码两个字段,先打开浏览器开发者工具,抓正常登录时的POST请求载荷,把里面的隐藏字段(比如CSRF令牌)一起带上,缺字段也会被拦截。
基础修正后的代码示例:
import requests # 替换为自己的账号信息 email = "your_account_email" password = "your_account_password" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", "X-Requested-With": "XMLHttpRequest", "Referer": "https://replit.com/login", "Content-Type": "application/json" } login_payload = { "username": email, "password": password # 此处补充抓包拿到的其他必填字段,比如csrf token } session = requests.Session() resp = session.post( url="https://replit.com/login", json=login_payload, headers=headers, allow_redirects=True )
2. 后续reCAPTCHA拦截问题说明
补全请求头后遇到的reCAPTCHA人机校验,无法通过简单修改请求参数绕过:
- reCAPTCHA会综合校验浏览器环境特征、操作轨迹、IP风险等级等多维度信息,纯requests模拟的请求没有真实浏览器渲染环境,特征非常明显,几乎不可能通过校验。
- 手动破解、绕过reCAPTCHA的操作违反Replit服务条款,不建议尝试。
- 如果需求是拉取个人账号下的存储文件,优先走官方提供的正规授权接口,不要用模拟网页登录的方式,不会触发人机校验,稳定性也有保障。
- 如果必须做网页端自动化操作,替换为带真实浏览器内核的自动化工具(比如Playwright),加载完整浏览器环境可以大幅降低被拦截的概率,但也无法保证100%绕过reCAPTCHA校验,IP存在风险记录时依然会弹出验证。
内容的提问来源于stack exchange,提问作者A64Hacker
相关产品推荐
相关产品推荐

