feat: 支持自定义 webhook 请求的 headers

This commit is contained in:
amtoaer
2026-03-31 01:13:12 +08:00
parent 55dde84f96
commit 2e49d31b15
3 changed files with 75 additions and 12 deletions
+16 -1
View File
@@ -1,6 +1,7 @@
mod info;
mod message;
use std::collections::HashMap;
use anyhow::Result;
use futures::future;
pub use info::DownloadNotifyInfo;
@@ -20,6 +21,8 @@ pub enum Notifier {
Webhook {
url: String,
template: Option<String>,
#[serde(default)]
headers: Option<HashMap<String, String>>,
#[serde(skip)]
// 一个内部辅助字段,用于决定是否强制渲染当前模板,在测试时使用
ignore_cache: Option<()>,
@@ -74,6 +77,7 @@ impl Notifier {
Notifier::Webhook {
url,
template,
headers,
ignore_cache,
} => {
let key = webhook_template_key(url);
@@ -82,9 +86,20 @@ impl Notifier {
Some(_) => handlebar.render_template(webhook_template_content(template), &message)?,
None => handlebar.render(&key, &message)?,
};
let mut headers_map = header::HeaderMap::new();
headers_map.insert(header::CONTENT_TYPE, "application/json".try_into()?);
if let Some(custom_headers) = headers {
for (key, value) in custom_headers {
if let (Ok(key), Ok(value)) = (header::HeaderName::try_from(key), header::HeaderValue::try_from(value)) {
headers_map.insert(key, value);
}
}
}
client
.post(url)
.header(header::CONTENT_TYPE, "application/json")
.headers(headers_map)
.body(payload)
.send()
.await?;