Rust中如何拷贝对象?reqwest响应调用消费self方法报错如何解决
问题解决思路
- 错误根源:
reqwest::blocking::get返回值为Result<reqwest::blocking::Response, reqwest::Error>类型,该类型未实现Clonetrait,直接调用.clone()会触发E0599错误- 原代码逻辑即使支持克隆,两次对Result调用
.unwrap()也属于多余操作,完全没有必要
正确实现代码
你只需要先取出单次请求的Response实例,再分别读取状态和内容即可,全程仅发起一次HTTP请求:
fn main() { // 先拿到Response实例,仅unwrap一次 let resp = reqwest::blocking::get("https://www.rust-lang.org").unwrap(); // 先获取状态:status()方法仅需&self引用,不会消费Response let status = resp.status(); // 再获取HTML内容:text()会消费self,放在最后调用即可 let rawhtml = resp.text().unwrap(); println!("status: {}\n\n", status); println!("{}", rawhtml); }
补充说明
如果需要更健壮的错误处理,可以把unwrap()替换为match或if let分支逻辑,避免请求失败时程序直接panic。
内容的提问来源于stack exchange,提问作者Papu
相关产品推荐
相关产品推荐

