Почему библиотека reqwest HTTP возвращает двоичные данные вместо текстового тела? - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь выполнить HTTP-запрос GET с помощью reqwest и распечатать тело ответа в STDOUT. Это работает для большинства веб-сайтов, но возвращает странный двоичный вывод для amazon.com:

#[tokio::main]
async fn main() {
    run().await;
}

async fn run() {
    let url = "https://www.amazon.com/PNY-GeForce-Gaming-Overclocked-Graphics/dp/B07GJ7TV8L/";
    let resp = reqwest::get(url).await.unwrap();
    let text = resp.text().await.unwrap();
    println!("{}", text);
}

Почему resp.text().await.unwrap() возвращает двоичные данные и как я могу получить из них нормальное тело HTTP?

curl возвращает HTML Я ожидал:

curl https://www.amazon.com/PNY-GeForce-Gaming-Overclocked-Graphics/dp/B07GJ7TV8L/

1 Ответ

3 голосов
/ 01 марта 2020

Если вы сделаете curl https://www.amazon.com/PNY-GeForce-Gaming-Overclocked-Graphics/dp/B07GJ7TV8L/ - I, вы увидите:

server: Server
content-type: text/html
content-length: 2148
content-encoding: gzip
x-amz-rid: 2T9PBCY66S79SMC424V2
vary: Accept-Encoding
akamai-cache-status: Miss
date: Sat, 29 Feb 2020 22:23:54 GMT

content-encoding: gzip совершенно очевидно, что вам нужно сделать. Оформить заказ gzip от reqwest. gzip - это дополнительные функции , см. car go do c, для reqwest вы можете написать reqwest = { version = "0.10.3", features = ["gzip"] } в вашем Cargo.toml.

...