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

Python登录Windows CE舒适面板下载CSV返回HTML问题解决

问题根因

你拿到HTML而非目标CSV的核心原因有两个:

  • 会话未复用:你在with requests.session() as s代码块内完成了登录鉴权,但后续发起文件下载请求时,用的是独立的requests.get()方法,这个全新请求没有携带登录成功后服务端下发的认证Cookie,会被服务端判定为未授权访问,自动重定向到登录页面,最终保存的就是登录页的HTML源码。
  • 缺失必要请求头:Windows CE架构舒适面板的内置Web服务会校验请求来源,下载文件时如果不带对应目录页的Referer头,会直接返回目录浏览的HTML页面,不会触发文件下载。
修正代码
import requests
from bs4 import BeautifulSoup

loginurl = "http://10.70.148.11/FormLogin"
secure_url = "http://10.70.148.11/StorageCardSD?UP=TRUE&FORCEBROWSE"
downloadurl = "http://10.70.148.11/StorageCardSD/AuditTrail0.csv?UP=TRUE&FORCEBROWSE"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    'Referer': secure_url
}

payload = {
    'Login': 'Admin',
    'Password': 'Pass'
}

with requests.session() as s:
    # 统一给会话挂载请求头,所有该会话发起的请求都会自动携带
    s.headers.update(headers)
    # 发起登录请求
    login_resp = s.post(loginurl, data=payload)
    # 访问存储卡目录页,校验登录是否生效
    dir_resp = s.get(secure_url)
    soup = BeautifulSoup(dir_resp.content, 'html.parser')
    print(soup.prettify())
    
    # 复用同一个已登录的会话发起下载请求,不要新建独立请求
    file_resp = s.get(downloadurl, allow_redirects=True)
    # 简单校验返回内容,避免把HTML存成CSV
    if b'<html' in file_resp.content.lower()[:200]:
        raise ValueError("下载返回内容为HTML,未获取到CSV文件,请检查登录状态、文件路径是否正确")
    
    # 写入文件
    with open('audittrail.csv', 'wb') as csv_file:
        csv_file.write(file_resp.content)
排查补充说明
  • 先在浏览器手动完成登录,直接访问下载路径确认文件真实地址,部分面板的审计追踪文件会按日期生成序号,不一定固定为AuditTrail0.csv。
  • 如果校验时发现返回的是登录页HTML,先检查登录接口的payload字段是否和浏览器实际提交的一致,部分面板的登录接口还需要携带隐藏的CSRF token字段,需要先访问登录页解析出对应字段再提交登录请求。
  • 如果返回的是存储卡目录页HTML,检查下载URL的参数是否正确,FORCEBROWSE参数不能缺失,且参数顺序不能随意调整,否则服务端不会返回文件内容。

内容的提问来源于stack exchange,提问作者Eduardo Montemayor García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:09:48