使用Python Requests库登录slicethepie.com时遇419错误求助
问题解答
是否需要传递XSRF-TOKEN?
是的,你需要传递XSRF-TOKEN,但必须配合表单中的_token字段一起使用——两者需要对应匹配(这类验证常见于Laravel框架,Cookie中的XSRF-TOKEN是加密存储的,表单里的_token是解密后的有效令牌,服务器会验证两者的关联性)。
你的代码返回419错误的原因
会话Cookie处理冲突
你使用了requests.Session()却手动在headers里设置Cookie,Session会自动管理会话Cookie,手动设置会覆盖或干扰Session的Cookie存储逻辑,导致服务器无法验证会话一致性。请求格式不匹配
你用json=payload发送请求,但网站实际接受的是表单编码格式(application/x-www-form-urlencoded),服务器无法正确解析JSON格式的登录参数。Payload语法错误
location[latitude]: None是无效的Python字典语法,应该写成"location[latitude]": None。硬编码Token过期/不匹配
你手动填写的_token和Cookie中的XSRF-TOKEN可能不对应,或者已经过期。正确做法是从登录页面的响应中动态提取有效令牌。会话上下文断裂
第一次GET请求没有通过Session发送,导致Session未保存初始会话Cookie,后续POST请求的会话上下文与服务器预期不符。
修正后的代码示例
import requests from bs4 import BeautifulSoup # 需先安装:pip install beautifulsoup4 login_url = "https://www.slicethepie.com/login" with requests.Session() as s: # 1. 发送GET请求获取登录页面,自动保存会话Cookie s.headers.update({ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" }) response = s.get(login_url) # 2. 从页面HTML中动态提取_token soup = BeautifulSoup(response.text, "html.parser") token = soup.find("input", {"name": "_token"}).get("value") # 3. 准备正确格式的登录参数 payload = { "email": "newtalent0909@gmail.com", "password": "password", "_token": token, "validation": "token", "location[latitude]": None, "location[longitude]": None } # 4. 发送POST请求,用data参数传递表单数据,Session自动携带Cookie headers = { "Accept": "*/*", "Referer": login_url, "Origin": "https://www.slicethepie.com" } p = s.post(login_url, headers=headers, data=payload) print(p.status_code) # 可查看响应内容确认登录结果:print(p.text)
关键注意点
- 始终用Session发送所有请求,确保会话Cookie被自动维护。
- 动态提取
_token,避免硬编码——令牌是会话绑定的,过期后会直接触发419错误。 - 用
data=payload传递登录参数,匹配网站的表单数据格式。 - 不要手动设置Cookie,Session会自动处理从GET请求获取的Cookie。
内容的提问来源于stack exchange,提问作者MouseWarrior
相关产品推荐
相关产品推荐

