2

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

4

1 回答 1

2

要获取 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") >| )

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

本指南对于可用的不同函数和处理程序是一个很好的参考。

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

于 2013-09-10T00:20:05.710 回答