Stream error: error decoding response body
错误信息
API Error: Stream error: error decoding response body
AI 解决方案
🔍 报错分析
1. 🌐 错误翻译
原文:API Error: Stream error: error decoding response body
译文:API 错误:流错误:解码响应体出错
2. 🎯 原因分析
3. 💡 解决方案
若使用常见的 HTTP 客户端(以
reqwest 为例,异步流场景),修复核心是明确指定响应格式并添加异常处理,避免格式不匹配导致的解码失败,修复代码如下:use reqwest::{Client, StreamExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.get("https://api.example.com/stream")
.send()
.await?;
// 校验响应状态码,非成功状态直接终止
if !response.status().is_success() {
return Err(format!("API 响应异常,状态码:{}", response.status()).into());
}
// 明确声明按字节流处理,逐块读取避免整体解码失败
let mut stream = response.bytes_stream();
while let Some(chunk) = stream.next().await {
let chunk = chunk?;
// 对每一块数据单独处理,可针对性转换格式(如解析 JSON 片段需确保片段完整)
if let Ok(chunk_str) = String::from_utf8(chunk.to_vec()) {
println!("处理流数据:{}", chunk_str);
} else {
return Err("响应体存在非 UTF-8 格式数据,解码失败".into());
}
}
Ok(())
}
补充修复步骤:
Content-Type 响应头,确认与程序解析格式一致(如 application/json 需对应 JSON 解析,text/plain 需对应字符串解析);try-catch(不同语言语法不同,如 JS 用 try-catch,Python 用 try-except)打印响应体原始内容,定位格式问题;4. 🛡️ 预防措施
Accept: application/json),服务端会按约定格式返回,减少格式不匹配风险;同时解析前优先校验 Content-Type,与预期格式不符时提前终止。- 使用 Postman 或 curl 直接访问目标 API,查看原始响应内容,确认响应格式、编码是否符合预期,排除网络传输导致的乱码、数据丢失;
- 在代码中集成日志工具(如 Rust 的
log 库、Python 的 logging 模块),打印原始响应数据,精准定位解码失败的片段,快速定位