rust reqwest get请求中文乱码如何解决?
use reqwest;
// 定义一个自定义错误类型,可以保存 InvalidHeaderValue 或 reqwest::Error。
#[derive(Debug)]
enum MyError {
InvalidHeader(reqwest::header::InvalidHeaderValue),
Reqwest(reqwest::Error),
}
impl From<reqwest::Error> for MyError {
fn from(error: reqwest::Error) -> Self {
MyError::Reqwest(error)
}
}
#[tokio::main]
async fn main() -> Result<(), MyError> {
// 创建一个 reqwest 客户端。
let client = reqwest::Client::new();
// 定义 User-Agent 值;用你实际的 User-Agent 替换它。
let user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.31";
let accept = "Accept: */*";
let accept_encoding = "Accept-Encoding: gzip, deflate, br";
let connection = "Connection: keep-alive";
let content_type = "Content-Type: application/json; charset=UTF-8";
// 创建一个请求构建器,设置 URL 和头部。
let response = client
.get("https://api.bilibili.com/x/space/wbi/arc/search?mid=259333&ps=1&pn=1")
.header(reqwest::header::USER_AGENT, user_agent)
.header(reqwest::header::ACCEPT, accept)
.header(reqwest::header::ACCEPT_ENCODING, accept_encoding)
.header(reqwest::header::CONNECTION, connection)
.header(reqwest::header::CONTENT_TYPE, content_type)
.send()
.await?;
let body = response.text().await?;
println!("{:?}", body);
Ok(())
}
思路一:更改编码 本人尝试无效思路二:编译器编码问题 不知从何入手未尝试思路三:需要处理gzip 本人尝试无效希望大佬们可以赐教
回复
1个回答

test
2024-06-26
这是因为服务端的响应是经过gzip压缩的,你需要在cargo.toml
里配置reqwest
,增加以下内容
reqwest = { version = "0.11.20", features = ["gzip"] }
又或者将你将代码中设置accept_encoding
的相关部分删掉,这样服务端就不会压缩响应内容
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容