From b1902baa1352bb6b7a87a04339de5f400ff7f5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=B4=E5=A4=A9?= Date: Mon, 20 Apr 2026 15:35:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(http):=20reqwest=20=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E5=90=AF=E7=94=A8=20brotli=20/=20deflate=20=E8=A7=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对接部分 provider 时会返回 Content-Encoding: br / deflate, 缺少对应 feature 时 reqwest 只能按压缩字节原样交给调用方, 导致 text() 解码异常或 body 看似为空。显式开启两项 feature, 让所有标准压缩响应都可被正常还原。 --- src-tauri/Cargo.lock | 1 + src-tauri/Cargo.toml | 2 +- src-tauri/src/commands/mod.rs | 6 +++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index e66623b..1f77c9d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -406,6 +406,7 @@ version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb7b51a7d9c967fc26773061ba86150f19c50c0d65c887cb1fbe295fd16619b7" dependencies = [ + "brotli", "compression-core", "flate2", "memchr", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index bdbc606..a9014c5 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -23,7 +23,7 @@ serde_json = "1" dirs = "6" chrono = "0.4" zip = { version = "2", default-features = false, features = ["deflate"] } -reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream", "gzip"], default-features = false } +reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream", "gzip", "brotli", "deflate"], default-features = false } futures-util = "0.3" ed25519-dalek = { version = "2", features = ["rand_core"] } sha2 = "0.10" diff --git a/src-tauri/src/commands/mod.rs b/src-tauri/src/commands/mod.rs index 26e7920..f244a24 100644 --- a/src-tauri/src/commands/mod.rs +++ b/src-tauri/src/commands/mod.rs @@ -357,7 +357,11 @@ fn build_http_client_opt( user_agent: Option<&str>, use_proxy: bool, ) -> Result { - let mut builder = reqwest::Client::builder().timeout(timeout).gzip(true); + let mut builder = reqwest::Client::builder() + .timeout(timeout) + .gzip(true) + .brotli(true) + .deflate(true); if let Some(ua) = user_agent { builder = builder.user_agent(ua); }