You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python登录带Cookie验证的网站如何解决Cookie过期问题

解决方案

核心思路

你当前的问题是硬编码固定的PHPSESSID,服务端会话过期后自然失效。改用requests.Session()自动管理会话Cookie,模拟完整登录流程主动获取有效Cookie,再配置过期重试机制即可解决。

具体实现步骤

  • 第一步:导入依赖,创建全局Session对象,自动处理服务端返回的Cookie、维持会话状态
  • 第二步:先请求登录页获取表单隐藏参数,避免CSRF校验拦截
  • 第三步:提交账号密码完成登录,Session会自动存储返回的有效Cookie
  • 第四步:后续所有业务请求都通过该Session发起,无需手动维护Cookie
  • 第五步:添加过期检测逻辑,检测到需要登录时自动重新触发登录流程

示例代码

import requests
from bs4 import BeautifulSoup

# 配置参数
USERNAME = "你的PhishTank账号"
PASSWORD = "你的PhishTank密码"
LOGIN_URL = "https://phishtank.org/login.php"
TARGET_URL = "https://phishtank.org/add_web_phish.php"

# 统一请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3',
    'Referer': 'https://phishtank.org/login_required.php',
    'Connection': 'keep-alive',
}

# 创建全局Session对象
session = requests.Session()
session.headers.update(headers)

def phishtank_login():
    """执行登录,更新Session中的Cookie"""
    # 先请求登录页拿隐藏表单字段
    login_page_resp = session.get(LOGIN_URL)
    soup = BeautifulSoup(login_page_resp.text, 'html.parser')
    # 提取登录表单隐藏参数(根据PhishTank实际表单字段调整)
    hidden_inputs = soup.find_all('input', type='hidden')
    form_data = {input.get('name'): input.get('value') for input in hidden_inputs}
    # 补充账号密码
    form_data.update({
        'username': USERNAME,
        'password': PASSWORD
    })
    # 提交登录请求
    login_resp = session.post(LOGIN_URL, data=form_data)
    # 校验登录是否成功
    if "login_required" not in login_resp.url and "Logout" in login_resp.text:
        print("登录成功,Cookie已更新")
        return True
    else:
        print("登录失败,请检查账号密码或表单参数")
        return False

def request_with_auto_login(url, retry=1):
    """带自动登录重试的请求方法"""
    resp = session.get(url)
    # 判断是否Cookie过期
    if "login_required" in resp.url or "Please log in" in resp.text:
        if retry > 0:
            print("Cookie已过期,重新登录后重试")
            if phishtank_login():
                return request_with_auto_login(url, retry-1)
        raise Exception("请求失败,登录重试后仍无效")
    return resp

# 首次执行先登录
phishtank_login()
# 发起业务请求
response = request_with_auto_login(TARGET_URL)
print(response.text)

注意事项

  • 需提前安装依赖:pip install requests beautifulsoup4
  • 代码中的表单字段需要根据PhishTank登录页的实际表单结构调整,如果站点没有做CSRF校验,也可以直接去掉解析隐藏字段的逻辑,仅提交账号密码即可
  • 控制请求频率,避免触发站点的反爬机制

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:30:04