在与 Hyper 的交易之间保留 cookie

Keeping cookie between transactions with Hyper

我希望能够为下一个请求保留上一个请求的 cookie:

let hyper_client = Client::new();
server_response  = hyper_client.request(Method::Get, url).headers(Headers::new()).send();

假设上面的代码编译成功,我如何检索此会话的 cookie?

像这样的东西应该可以工作:

match server_response.headers.get() {
   Some(&SetCookie(ref content)) => println!("Cookie: {:?}", content),
   _ => println!("No cookie found"),
}

使用 Cookie header 发送 服务器的 cookie,SetCookie 发送 来自[的 cookie =29=]服务器。我之所以强调这一点,是因为我一开始只看到 Cookie,然后就被它吸引住了。

另外,请注意我只是通过模式匹配的类型推断来请求 SetCookie header。我也可以使用 turbo-fish: headers.get::<SetCookie>().

如果您需要将相同的 cookie 发送回服务器,您只需将响应中的 SetCookie 值克隆回请求的新 Cookie header:

let mut headers = Headers::new();
// if you received cookies in the server response then send the same ones back
if let Some(&SetCookie(ref content)) = server_response.headers.get() {
   headers.set(Cookie(content.clone()));
}

hyper_client.request(Method::Get, url)
    .headers(headers)
    .send();