青龙面板修复Bark通知失败

最近使用青龙面板来管理定时任务,使用Bark来自建推送通知,最近在检查日志的时候发现有遇到Bark通知的时候失败的问题

1
HTTPError: Response code 431 (Request Header Fields Too Large)

查了下431一般是头文件太大了,在这个场景中只有可能是URL太长导致,核对青龙面板的Bark推送实现发现使用的是Bark的GET接口,这就导致了在推送内容太长的情况下导致HTTP431错误

手动修改sendNotify.js文件,修改是使用Bark新版接口,成功解决问题,代码段如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function BarkNotify(text, desp, params = {}) {
return new Promise((resolve) => {
if (BARK_PUSH) {
const options = {
url: `${BARK_PUSH}`,
json: {
title: text,
body: desp,
group: `${BARK_GROUP}`,
icon: `${BARK_ICON}`,
sound: `${BARK_SOUND}`,
},
headers: {
'Content-Type': 'application/json; charset=utf-8',
},
timeout,
};
$.post(options, (err, resp, data) => {
try {
if (err) {
console.log('Bark APP发送通知调用API失败!!\n');
console.log(err);
} else {
data = JSON.parse(data);
if (data.code === 200) {
console.log('Bark APP发送通知消息成功🎉\n');
} else {
console.log(`${data.message}\n`);
}
}
} catch (e) {
$.logErr(e, resp);
} finally {
resolve();
}
});
} else {
resolve();
}
});
}

另外当调用ql repo命令后遇到sendNotify.js被还原的情况,是由于新版本青龙在拉取脚本后自动回会重新覆盖sendNotify.js脚本,只需修改青龙数据目录下deps文件夹中的sendNotify.js,即可保证每次覆盖都是修改后的版本。