使用Python requests登录站点返回419页面过期状态码如何解决
错误原因
419状态码是Laravel框架的CSRF校验失败/页面过期错误,你的代码里硬编码了抓包得到的固定_token值和Cookie,这两个值都是临时失效的,每次访问登录页都会刷新,用过期值提交请求就会触发419错误。
修正后的代码实现
首先安装依赖:pip install requests beautifulsoup4 lxml
import requests from bs4 import BeautifulSoup url = 'https://rates.itgtrans.com/login' # 保留原有请求头,删除硬编码的cookie字段即可 headers = { 'authority': 'rates.itgtrans.com', 'cache-control': 'max-age=0', 'sec-ch-ua': '"Chromium";v="94", "Google Chrome";v="94", ";Not A Brand";v="99"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'upgrade-insecure-requests': '1', 'origin': 'https://rates.itgtrans.com', 'content-type': 'application/x-www-form-urlencoded', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'navigate', 'sec-fetch-user': '?1', 'sec-fetch-dest': 'document', 'referer': 'https://rates.itgtrans.com/login', 'accept-language': 'en-US,en;q=0.9' } with requests.Session() as s: # 第一步:先GET访问登录页,获取最新Cookie和页面中的CSRF token resp = s.get(url, headers=headers) soup = BeautifulSoup(resp.text, 'lxml') # 从登录页的隐藏input标签中提取_token值 csrf_token = soup.find('input', {'name': '_token'})['value'] # 第二步:组装提交数据,用动态获取的token data = { '_token': csrf_token, 'email': '替换为你的实际账号', 'password': '替换为你的实际密码', 'button': '' } # 第三步:提交登录请求,Session会自动携带当前会话的Cookie login_resp = s.post(url, data=data, headers=headers) # 打印状态码和返回内容确认登录结果 print(login_resp.status_code) # 可打印响应文本验证是否登录成功 # print(login_resp.text)
注意事项
- 不要硬编码任何临时凭证(Cookie、CSRF令牌),所有凭证通过动态请求获取
- requests.Session会自动维护整个会话的Cookie状态,不需要手动处理Cookie参数
- 如果请求失败,可检查账号密码是否正确,或者调整请求头的User-Agent为你当前浏览器的实际UA值
内容的提问来源于stack exchange,提问作者Capitán Planeta
相关产品推荐
相关产品推荐

