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

Python requests模拟登录课程评价网站POST返回404问题咨询

大学课程评价网站登录POST返回404问题排查方案

可能的失败原因

  • 提交地址不匹配:很多站点登录提交的接口地址和登录页面地址并不一致,你当前提交到https://pomonastudents.org/login,实际浏览器登录时的POST接口可能是/users/sign_in、/sessions等其他路径,甚至路径末尾有无斜杠都会被识别为不同地址。
  • 请求头缺失必要字段:从你代码里的authenticity_token可判断站点是Rails框架开发,这类框架通常会校验Referer、Accept、Content-Type等请求头,缺失对应字段会直接返回404或422错误。你直接覆盖请求头的操作还可能删除了requests默认携带的标准头,进一步导致请求异常。
  • payload格式错误:如果站点要求提交JSON格式的参数,你用默认表单格式application/x-www-form-urlencoded提交就会被识别为非法请求,反之也会报错。
  • 反爬策略拦截:部分校园站点会检测非浏览器的请求特征,比如请求间隔过短、缺少常见浏览器头,会直接返回404伪装页面不存在。
  • 令牌校验不匹配:部分站点会把authenticity_token和Cookie值做绑定校验,如果你抓取令牌和提交请求的会话不统一、或者令牌抓取后间隔太久超过有效期,也会导致请求被拦截。

可执行的排查步骤

  1. 核对真实提交地址:打开浏览器网络面板,手动触发一次正常登录,确认Request URL字段和你代码里的POST地址完全一致,包括协议类型、域名、路径、末尾斜杠都要完全匹配。
  2. 修正请求头设置:把直接赋值headers的操作改成增量更新,避免覆盖requests默认携带的标准头,同时从浏览器登录请求里复制全量请求头,逐个添加测试:
    # 错误写法:覆盖默认头
    # session.headers = {'User-Agent': 'xxx'}
    # 正确写法:增量更新,保留默认头
    session.headers.update({
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
        'Referer': 'https://pomonastudents.org/login',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
    })
    
  3. 校验payload提交格式:看浏览器登录请求的Content-Type字段,如果是application/json,把提交代码从data=payload改成json=payload即可。
  4. 增加请求间隔:在GET登录页面和POST提交之间加1-2秒延迟,避免被反爬识别为机器人:
    import time
    s = session.get("https://pomonastudents.org/login")
    time.sleep(2)
    payload.update({'authenticity_token': get_authenticity_token(s.text)})
    
  5. 打印完整响应信息排查:除了响应文本,还要打印状态码、响应头确认404的来源:
    print(s.status_code)
    print(s.headers)
    print(s.text)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:06