通过 Raspberry Pi 上的 Python 'wget' 子进程请求 FritzBox 日志文件 >> 返回 HTML 而不是 JSON

问题描述 投票:0回答:1

我正在尝试使用 Python 3 脚本JSON 格式从我的 AVM FritzBox 7350 路由器(操作系统 7.57) 下载事件和 WLAN 日志。虽然它在我的 ArchLinux 机器上运行良好,但我在 Raspberry Pi 服务器(Raspbian Bullseye)上只得到一个 HTML 文件,没有明显的原因。两台机器都运行Python 3.12.4

为了生成会话 ID (SID) 并登录,我依赖于此处AVM 技术说明中的代码。

生成 SID 并登录工作非常顺利。然后,我下载一个日志文件,例如'page=wSet' 或 'page=log',使用 python 子进程 调用 bash 'wget' 命令发送 POST 数据,如以下函数所示:

def download_log(sid: str) -> str:
    cmd = 'wget -q -O - --post-data="sid='+sid+'&lang=de&page=wSet&no_sidrenew=" http://fritz.box/data.lua?version=2'
    # .........................................................................V use system's UTF-8 encoding)
    return str(subprocess.check_output(cmd, shell=True, executable="/bin/bash",text=True))                                                             

我将返回的字符串写入我的“日志文件”:

with open('./logfile','w') as logfile:
    logfile.write(download_log(sid))

再次,在我的ArchLinux-System上工作得很好,并生成一个格式为JSON的文件,这是我在阅读了教程/英语谷歌翻译后所期望的。它很容易用“jq”来解析。

但是,当我在

我的 Raspberry Pi 服务器(Raspbian 11(Bullseye))上运行非常相同的脚本时,我得到的只是一个页面的 HTML 文件,询问我是否要进入 FritzBox 界面[参见附图,不幸的是全是德语]...

从 Raspberry Pi 上的“wget”返回的 HTML 文件

在两个系统上Python 3.12.4均已成功安装。两者都通过 wifi 连接到 FritzBox。我不明白什么会导致两台机器上“wget”例程的不同行为。

有人知道吗?

致以诚挚的问候,

.修补匠

python json raspberry-pi logfile fritzbox
1个回答
0
投票
Raspberry Pi 上的“wget”已经过时了。

我不知道有关不同行为的任何细节,但从版本

1.21(安装在Raspbian系统上)到1.24(安装在ArchLinux系统上)明显发生了变化。

只需

获取并构建最新的“wget”版本,可以在此处找到。

命令

wget -q -O - --post-data="sid=XXXXXXXXXXXX&lang=de&page=wSet&no_sidrenew=" http://fritz.box/data.lua?version=2'
然后将从 FritzBox 返回 JSON 格式的 WLAN 活动日志。
确保您

根据 AVM 的技术说明将 XXXXXXXXXXXX 替换为您生成的会话 ID。

© www.soinside.com 2019 - 2024. All rights reserved.