let req: Request = client.get("https://someaddress").build().unwrap();
let resp = client.execute(req).await.unwrap();
let response_headers = resp.headers();
let response_text = resp.text().await.unwrap(); // cannot move out of `resp` because it is borrowed move out of `resp` occurs here
如果text()
和headers()
都使用响应,那么我们如何同时获得响应头和响应体呢?
1条答案
按热度按时间svmlkihl1#
获取头部 * 不会 * 消耗响应,而是返回一个对存储在响应中的
HeaderMap
的引用,但是获取主体 * 会 * 消耗响应,这意味着对它的任何引用都是无效的,因此尝试同时保留这两个响应会出错。要同时保留这两个头文件,只需克隆头文件即可:
或者为了避免重复数据,您可以从响应中“取出”标头:
使用
std::mem::take
将从.headers_mut()
中取出&mut
中的值,并在其位置保留默认的空HeaderMap
。这两种方法都意味着
response_headers
不再引用响应,您可以很高兴地获得响应体,而不必担心丢失响应体。