rust reqwest get请求中文乱码如何解决?

作者站长头像
站长
· 阅读数 30
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(())
}

rust reqwest get请求中文乱码如何解决?思路一:更改编码 本人尝试无效思路二:编译器编码问题 不知从何入手未尝试思路三:需要处理gzip 本人尝试无效希望大佬们可以赐教

回复
1个回答
avatar
test
2024-06-26

这是因为服务端的响应是经过gzip压缩的,你需要在cargo.toml里配置reqwest,增加以下内容

reqwest = { version = "0.11.20", features = ["gzip"] }

又或者将你将代码中设置accept_encoding的相关部分删掉,这样服务端就不会压缩响应内容

answer image

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