Rust 无法读取通过hyper::client::client发出HTTP请求的简单有效负载:未满足特性绑定“Body:Future”

Rust 无法读取通过hyper::client::client发出HTTP请求的简单有效负载:未满足特性绑定“Body:Future”,rust,future,hyper,Rust,Future,Hyper,我正在尝试将结果转换为缓冲区: 错误[E0277]:未满足特性绑定'hyper::Body:hyper::rt::Future' ->src/刮板机rs:24:14 | 24 |然后| res |{ |^^^^^^^^未为“hyper::Body”实现特性“hyper::rt::Future”` | =注意:由于对'hyper::Body'的'futures::future::IntoFuture'的impl有要求,因此需要` 错误[E0599]:在当前作用域中找不到类型“futures::fu

我正在尝试将结果转换为缓冲区:

错误[E0277]:未满足特性绑定'hyper::Body:hyper::rt::Future' ->src/刮板机rs:24:14 | 24 |然后| res |{ |^^^^^^^^未为“hyper::Body”实现特性“hyper::rt::Future”` | =注意:由于对'hyper::Body'的'futures::future::IntoFuture'的impl有要求,因此需要` 错误[E0599]:在当前作用域中找不到类型“futures::future::and_then::AndThen”的名为“from_err”的方法 ->src/刮板机rs:29:14 | 29 |从|错误:: | ^^^^^^^^ | =注意:方法'from_err'存在,但不满足以下特征界限: `&mut futures::future::and_then::and then:hyper::rt::future` `&mut futures::future::and_then::and then:hyper::rt::Stream` `futures::future::and_then::and then:hyper::rt::future` 为什么不编译?

然后,你必须返回一个未来,或者可以通过特质转换成未来的东西。你将res.返回到身体,而不是未来-

要使其正常工作,您需要将该流转换为表示已完全阅读正文的未来流。此处有几个选项可供您选择:

res.into_body.concat2,它将所有读取字节连接到单个缓冲区中 res.into_body.collect,它将所有字节块收集到一个Vec中 res.into_body.into_future,它将解析为一个元组,其中包含流中的第一项,以及流本身的其余部分,即T,stream 有多种不同且同样有效的方式将流表示为未来,这一事实很可能是前者没有全面实现IntoFuture的原因

显示了使用concat2的一个示例。

然后必须返回一个未来,或者可以通过特征转换为未来的东西。您将res.返回到身体,而不是未来-

要使其正常工作,您需要将该流转换为表示已完全阅读正文的未来流。此处有几个选项可供您选择:

res.into_body.concat2,它将所有读取字节连接到单个缓冲区中 res.into_body.collect,它将所有字节块收集到一个Vec中 res.into_body.into_future,它将解析为一个元组,其中包含流中的第一项,以及流本身的其余部分,即T,stream 有多种不同且同样有效的方式将流表示为未来,这一事实很可能是前者没有全面实现IntoFuture的原因

显示了使用concat2的示例

let ufc_root: String =
    String::from("https://www.ufc.com/athletes/all?filters%5B0%5D=status%3A23");
// let ufc_root: String = String::from("https://www.google.com");
let https = HttpsConnector::new(4).unwrap();
let client = Client::builder().build::<_, hyper::Body>(https);

client
    .get(ufc_root.parse::<hyper::Uri>().unwrap())
    .and_then(|res| {
        println!("http status code: {}", res.status());
        println!("http response headers:\n{:?}: ", res.headers());
        res.into_body()
    })
    .from_err::<WebScrapeError>()
    .and_then(|body| {
        body.for_each(|chunk| {
            println!("{}", chunk.into_bytes());
        });

        let jon_jones = Subject {
            name: "Jon Jones".to_string(),
            link: "http://www.jonjones.com".to_string(),
        };
        let subjects = vec![jon_jones];
        Ok(subjects)
    })
    .from_err()