From 524e5d6967b8445ff8e687a389ddeb2c86c26010 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Wed, 2 Sep 2026 08:39:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(panel):=20=E5=89=8D=E7=AB=AF=20NOT=5FJSON?= =?UTF-8?q?=20=E8=87=AA=E5=8A=A8=E5=9B=9E=E4=BC=A0=E5=8E=9F=E5=A7=8B?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E5=88=B0=20/api/debug/report=5Fbad=5Fjson?= =?UTF-8?q?=EF=BC=88=E8=90=BD=20/tmp/overview=5Fclient=5Fbad.txt=EF=BC=8C?= =?UTF-8?q?=E6=8A=93=E6=B5=8F=E8=A7=88=E5=99=A8=E6=94=B6=E5=88=B0=E7=9A=84?= =?UTF-8?q?=E7=9C=9F=E5=AE=9E=E5=AD=97=E8=8A=82=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- patch_v2/meowpanel/meowpanel.c | 8 ++++++++ patch_v2/meowpanel/web/meowpanel.js | 1 + 2 files changed, 9 insertions(+) diff --git a/patch_v2/meowpanel/meowpanel.c b/patch_v2/meowpanel/meowpanel.c index 4b508c3..d0a24a5 100644 --- a/patch_v2/meowpanel/meowpanel.c +++ b/patch_v2/meowpanel/meowpanel.c @@ -5495,6 +5495,14 @@ static int handle(int sock, req_t *r) if (!strcmp(p, "/api/system/shutdown")) return api_system_action(sock, "shutdown", r); if (!strcmp(p, "/api/system/ota")) return api_system_action(sock, "ota", r); if (!strcmp(p, "/api/system/pin-unlock-once")) return api_pin_unlock_once(sock); + if (!strcmp(p, "/api/debug/report_bad_json")) { + /* 前端 NOT_JSON 自动回传浏览器收到的原始字节(抓间歇性破包) */ + FILE *df = fopen("/tmp/overview_client_bad.txt", "w"); + if (df && r->body && r->body_len) fwrite(r->body, 1, r->body_len, df); + if (df) fclose(df); + panel_log("debug: client bad json captured %zu bytes -> /tmp/overview_client_bad.txt", (size_t)r->body_len); + return send_json(sock, 200, "{\"captured\":true}"); + } if (!strcmp(p, "/api/settings")) return api_settings_batch(sock, r); if (!strcmp(p, "/api/settings/restore")) return api_settings_restore(sock); if (!strcmp(p, "/api/theme")) return api_theme_put(sock, r); diff --git a/patch_v2/meowpanel/web/meowpanel.js b/patch_v2/meowpanel/web/meowpanel.js index c7a54fb..2f8ef27 100644 --- a/patch_v2/meowpanel/web/meowpanel.js +++ b/patch_v2/meowpanel/web/meowpanel.js @@ -178,6 +178,7 @@ if (!json || typeof json.ok !== 'boolean') { // 静态服务器返回 HTML / 404 等 dbgErr(method || 'GET', path, 'HTTP', res.status, ms + 'ms', '非 JSON 响应, len=' + text.length, '头:', text.slice(0, 200), '尾:', text.slice(-200)); + try { fetch('/api/debug/report_bad_json', { method: 'POST', headers: { 'Content-Type': 'text/plain', 'X-MeowToken': storageGet('meowpanel.token') || '' }, body: text }); } catch (e2) {} setConn(res.ok ? true : false); throw { code: 'NOT_JSON', message: '后端返回了非 JSON 响应(HTTP ' + res.status + ')', status: res.status }; }