是否可以从Rust中的reqwest复制bytes_stream

问题描述 投票:0回答:1

我希望向 URL 发出 get 请求,并从此处获取 bytes_stream 形式的响应,我想使用此数据发出 2 个 put 请求。

有没有办法发出一次 get 请求并以某种方式复制返回的 bytes_stream。

let response = client.get(get_url).send().await.unwrap();
let stream = response.bytes_stream();
let body = Body::wrap_stream(stream);
// Duplicate the body somehow?

// I will run these concurrently at some stage.
client.put(upload_url_1)
    .body(body)
    .send().await.unwrap()
    .text().await.unwrap();

client.put(upload_url_2)
    .body(duplicated_body)
    .send().await.unwrap()
    .text().await.unwrap();
rust concurrency byte reqwest
1个回答
0
投票

这是可能的,但不好,你可以有一个实现

Stream
的结构,它采用内部 Stream,然后你需要将数据存储在流中以便能够多次提供数据,最后你需要找到一种方法为每个流提供一个光标...否则,它不再是一个流,而是一个糟糕的实现向量。

如果您需要读取数据两次,则需要存储它,在您的情况下,

Vec<u8>
将工作得很好。如果您需要分享它
Arc<[u8]>
或只是克隆矢量。

© www.soinside.com 2019 - 2024. All rights reserved.