From 669a08c7c244c56cf7398cc5262566e5db9e8801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 13:51:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A7=E7=89=A9=E4=B8=8B=E8=BD=BD=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E4=BF=A1=E6=81=AF=E8=A1=A5=E4=B8=8A=E5=8F=AF=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=E4=B8=8A=E4=B8=8B=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 传输失败带上脱敏 URL 与底层错误 source 链 - 非成功状态补上状态码文案与脱敏 URL --- .../platform-tripo/src/common/client.rs | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/server-rs/crates/platform-tripo/src/common/client.rs b/server-rs/crates/platform-tripo/src/common/client.rs index d08f25ff9..5e6bb20c8 100644 --- a/server-rs/crates/platform-tripo/src/common/client.rs +++ b/server-rs/crates/platform-tripo/src/common/client.rs @@ -110,15 +110,22 @@ impl TripoProviderClient { .map_err(|_elapsed| artifact_stall_error(task_id, self.artifact_stall_timeout))? .map_err(|error| TripoError::Request { message: format!( - "artifact download transport failure for task {task_id}: {}", - transport_error_kind(&error) + "artifact download transport failure for task {task_id}: {} from {} ({})", + transport_error_kind(&error), + url.redacted(), + transport_error_source(&error), ), status: None, })?; let status = response.status(); if !status.is_success() { return Err(TripoError::Request { - message: format!("artifact download failed for task {task_id}"), + message: format!( + "artifact download failed for task {task_id}: {} {} ({})", + status.as_u16(), + status.canonical_reason().unwrap_or("unknown status"), + url.redacted(), + ), status: Some(status.as_u16()), }); } @@ -183,6 +190,13 @@ fn transport_error_kind(error: &reqwest::Error) -> &'static str { } } +/// reqwest 的 `Display` 会带上完整 URL(含签名参数),排障只取 source 链。 +fn transport_error_source(error: &reqwest::Error) -> String { + std::error::Error::source(error) + .map(|source| source.to_string()) + .unwrap_or_else(|| "no source detail".to_string()) +} + #[cfg(test)] mod tests { use std::net::SocketAddr;