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

树莓派Python调用wget获取FritzBox日志返回HTML而非JSON

问题分析与解决建议

可能的原因

  • wget版本差异:Raspbian Bullseye默认的wget版本(通常为1.21.x)较旧,和ArchLinux上的新版wget在POST请求处理、URL参数解析上存在行为差异,导致FritzBox返回HTML而非预期的JSON。
  • User-Agent识别:FritzBox可能根据请求的User-Agent头返回不同内容,Raspbian的wget默认User-Agent与Arch的不同,触发了网页版界面的返回逻辑。
  • 会话Cookie未传递:虽然POST参数中携带了SID,但FritzBox可能同时需要会话Cookie验证身份,旧版wget未自动处理Cookie,导致请求被重定向到登录引导页面。

解决步骤

1. 统一请求头与Cookie处理

修改download_log函数中的wget命令,添加User-Agent、Accept头,并强制处理会话Cookie:

def download_log(sid: str) -> str:
    cmd = '''wget -q -O - \
        --user-agent="Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
        --header="Accept: application/json" \
        --keep-session-cookies \
        --save-cookies=/tmp/fritz_cookies.txt \
        --load-cookies=/tmp/fritz_cookies.txt \
        --post-data="sid={sid}&lang=de&page=wSet&no_sidrenew=" \
        http://fritz.box/data.lua?version=2'''.format(sid=sid)
    return subprocess.check_output(cmd, shell=True, executable="/bin/bash", text=True)

注意:获取SID的登录步骤也需要添加相同的Cookie参数,确保会话Cookie被保存和复用。

2. 替换wget为Python原生请求库(推荐)

彻底避免依赖系统wget的版本差异,改用requests库直接发送请求,跨环境稳定性更强:
先安装requests:

pip install requests

再修改代码:

import requests

def download_log(sid: str) -> str:
    url = "http://fritz.box/data.lua?version=2"
    data = {
        "sid": sid,
        "lang": "de",
        "page": "wSet",
        "no_sidrenew": ""
    }
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "Accept": "application/json"
    }
    # 若登录时使用了session对象,直接复用可进一步保证会话一致性
    response = requests.post(url, data=data, headers=headers)
    response.raise_for_status()
    return response.text

3. 验证并更新wget版本

在两台机器上执行wget --version对比版本号,若Raspbian的wget版本过旧,可尝试更新:

sudo apt update && sudo apt install --only-upgrade wget

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:12:21