使用Python Requests库自动化登录网站的302跳转异常排查
解决requests.Session登录返回200而非302的问题
问题根源分析
你遇到的200响应说明登录请求未被服务器认可,大概率是以下原因:
- 未携带登录页面生成的CSRF令牌,服务器拒绝验证请求
- 请求头缺失关键字段(比如User-Agent、Referer),被识别为非浏览器请求
- 表单参数不全或字段名错误
修正后的代码实现
import requests from bs4 import BeautifulSoup # 初始化会话 session = requests.Session() # 1. 先访问登录页面,获取CSRF令牌和必要Cookie login_url = "https://www.tennisenpadelvlaanderen.be/login" headers = { "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" } response = session.get(login_url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 提取页面中的CSRF令牌(根据实际表单字段调整) csrf_token = soup.find("input", {"name": "csrf_token"})["value"] # 2. 构造登录表单数据 login_data = { "email": "hoegje+pepepepe@gmail.com", "password": "PepePepe", "csrf_token": csrf_token, "submit": "Login" # 补充表单提交按钮字段,按浏览器实际参数调整 } # 3. 发送POST登录请求 post_headers = headers.copy() post_headers["Referer"] = login_url # 添加来源页头,模拟浏览器行为 login_response = session.post(login_url, data=login_data, headers=post_headers) # 验证登录并获取目标页面 target_url = "https://www.tennisenpadelvlaanderen.be/dashboard/mijn-gegevens" dashboard_response = session.get(target_url, headers=headers) # 检查结果 if "mijn-gegevens" in dashboard_response.url: print("登录成功,目标页面内容片段:") print(dashboard_response.text[:500]) else: print(f"登录失败,登录请求状态码:{login_response.status_code}") print("登录响应内容片段:", login_response.text[:500])
关键注意事项
- CSRF令牌匹配:打开浏览器开发者工具,查看登录表单的隐藏输入框name属性,若不是
csrf_token需替换代码中的对应值 - 请求头完整性:必须携带User-Agent,部分网站会拦截无UA的请求;Referer头可让服务器确认请求来源合法
- 表单字段补全:查看浏览器网络面板中POST请求的Form Data,把所有字段(包括隐藏字段)都加入
login_data - 重定向处理:requests.Session默认自动处理302重定向,若需查看重定向过程可设置
allow_redirects=False手动跟进
内容的提问来源于stack exchange,提问作者Hoegje
相关产品推荐
相关产品推荐

