【问题标题】:Keeping cookie between transactions with Hyper在与 Hyper 的交易之间保存 cookie
【发布时间】:2017-02-27 02:52:28
【问题描述】:

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

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

假设上面的代码编译成功了,我该如何获取这个会话的cookie?

【问题讨论】:

    标签: cookies rust session-cookies hyper


    【解决方案1】:

    这样的事情应该可以工作:

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

    Cookie 标头用于发送服务器的cookie,SetCookie 用于发送服务器的cookie。我要强调这一点,因为我一开始只看到了Cookie,它让我很着迷。

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

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

    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();
    

    【讨论】:

    • 太好了,我现在可以检索它!但是我不能重用它...我尝试做headers.set(content) 并且...它不起作用...我认为我混淆了SetCookieCookie,一些帮助?
    • 我添加了一个将相同的 cookie 值发送回服务器的示例
    • 这个答案似乎已经过时了,因为hyper::client::Client 没有实现采用两个参数的方法。
    • @PeterHall cookie 功能 was removed 来自 hyper,不是吗?
    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    相关资源
    最近更新 更多