【问题标题】:working with cookies in dispatch-classic在 dispatch-classic 中使用 cookie
【发布时间】:2013-09-13 11:00:26
【问题描述】:

我需要以编程方式登录后端服务器,该服务器将身份验证令牌作为 cookie 返回,然后使用该 cookie 发出请求。我在 Lift 2.4 工作,我读到的所有内容似乎都建议使用 http-dispatch,但学习这麻烦! :-/ 由于我的 SBT 版本 (0.1-SNAPSHOT) 和 scala 版本 2.9.1,我在 dispatch-classic 中工作。所以我目前正在加载 dispatch 0.8.6 库。

我在以下位置找到了以下内容 https://groups.google.com/forum/#!msg/dispatch-scala/m7oWv2YAtjQ/imnkYoCDVUcJ

用于检索 cookie:

要从响应中读取 cookie,您必须调用 Response#getCookies 方法。例如,您可以这样做:

val res = Http(url("http://www.google.com/ig/api").addQueryParameter("weather", "Bonn, Germany"))
val response = for { r <- res } yield (r.getCookies, r.getResponseBody)

用于向后续请求添加 cookie:

url("http://www.google.com/ig/api").addCookie(cookie)

但我无法让它工作。 我的偏好是适用于 dispatch 0.8.6 的代码,但如果你可以让它在另一个版本中运行并且看不到那个版本不适用于我的 SBT 和 scala/Lift 版本,我会尝试使用你推荐的库版本。

【问题讨论】:

    标签: scala cookies sbt lift scala-dispatch


    【解决方案1】:

    要获取 cookie,您应该能够执行以下操作:

    Http(url("http://www.google.com/ig/api") <<? List("weather" -> "Bonn, Germany") >:> ((h) => h.get("Set-Cookie")))
    

    这将请求 URL,附加天气参数,然后将响应标头传递给处理函数,该处理函数查找 Set-Cookie 标头并返回带有值的 Option,如果不是,则返回 None现在。

    要设置 cookie,您可以:

    Http(url("http://www.google.com/ig/api") <<? List("weather" -> "Bonn, Germany") <:< Map("Set-Cookie" -> "something") >| )
    

    这将在&lt;:&lt; 指令之后的Map 中添加标头,在上述情况下,该指令包括cookie。 &gt;| 处理程序只是忽略响应,但您可以使用任何您想要的处理程序。

    This guide 是对可用的不同函数和处理程序的一个很好的参考。

    我使用 0.8.8 进行了检查,因为我没有早期版本,而且一切似乎都适合我。我不能确定,但​​我认为它应该与 0.8.6 相同。

    【讨论】:

    • 太棒了!我什至理解了那个周期表的一大块,它在前 5 次阅读它时让我难过......为了完整起见,这个请求是为了在 2 个服务器之间进行通信,所以我在一个方向上使用“Set-Cookie”来模拟后端服务器告诉调用服务器“设置一个 cookie”,就好像它是一个浏览器一样,但是在随后调用后端时,我使用“Cookie”来模拟现有 cookie 的使用......我想我可以称之为 any 此时自定义标题名称,但我坚持使用标准约定...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2011-06-04
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多