使用Python requests登录CoinGecko提示账号密码错误如何解决
CoinGecko requests登录报错解决方案
核心错误原因
你提交登录数据的格式不匹配接口要求:CoinGecko登录接口接收的是*表单格式(application/x-www-form-urlencoded)*参数,你使用json=data提交会自动将请求头的Content-Type设置为application/json,后端无法正常解析提交的账号密码字段,因此返回验证失败的结果。
同时你手动提取、传递_session_id的操作属于冗余逻辑,requests的Session实例会自动管理全流程的Cookie,不需要手动处理,多余操作反而可能导致Cookie校验失败。
修复步骤
- 将post请求的
json=data参数修改为data=data,指定以表单格式提交参数 - 移除所有手动提取、传入
_session_id的冗余代码 - 补充浏览器常规User-Agent请求头,绕过基础反爬识别
- 可选补充
user[remember_me]参数,和前端实际提交的参数结构保持一致
修正后代码示例
import requests s = requests.session() # 补充User-Agent,模拟普通浏览器请求 s.headers.update({ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" }) # 获取csrf token r = s.get("https://www.coingecko.com/accounts/csrf_meta.json") token = r.json()["token"] data = { "utf8": "✓", "authenticity_token": token, "user[email]": "你的实际邮箱", "user[password]": "你的实际密码", "user[remember_me]": "0" # 不需要记住登录就传0,需要就传1 } # 用data参数提交表单,不要用json r2 = s.post("https://www.coingecko.com/account/sign_in?locale=tr", data=data) print(r2.text) print(s.cookies.get_dict())
额外排查点
如果修改后仍验证失败,可以先通过浏览器抓包查看登录时实际提交的form表单参数,确认是否有遗漏的必填字段;如果账号开启了两步验证,还需要额外补充两步验证的相关参数。
内容的提问来源于stack exchange,提问作者Emrovsky Emrovsky
相关产品推荐
相关产品推荐

