我是Scala的新手。我正在尝试从Akka HTTP的optionalCookie方法获取Cookie。我想使用此optionalCookie(“ user_session”)的输出以其他方法传递。
如果我将其作为独立的API运行,则可以正常运行,并且我获得了cookie。为此,我做了类似的事情:
pathPrefix("datasession") {
get {
val route = optionalCookie("user_session") {
case Some(nameCookie) => complete(s"The logged in user is '${nameCookie}'")
case None => complete("No user logged in")
}
route
}
将输出设为
The logged in user is 'user_session=af2845c271754888e4e78195c445a1514e4b9b04fbcfc7e02f23d1d2e4781f68 .....'
现在,我希望此输出以某种方法使用。为此,我做了这样的事情:
def autorequestService(session:String,jwttoken : String, requestInput: requestInput) : Future[HttpResponse] = {
val pipeline: HttpRequest => Future[HttpResponse] = sendReceive ~> unmarshal[HttpResponse]
var sesionData = "";
val route = optionalCookie("user_session") {
case Some(nameCookie) =>
sessionData = nameCookie
complete(s"The logged in user is '${nameCookie}'")
case None => complete("No user logged in")
}
println("-------------- Session data ---------------------" +route.toString)
val response: Future[HttpResponse] = pipeline(Get("http://some-url/completions")
~> addCredentials(BasicHttpCredentials("user", "pass"))
~> addHeader("SESSION", sesionData))
response
}
但是我没有任何编译问题。但是在sessionData中,我没有得到cookie。如何在sessionData中获取cookie?
现在我尝试了这个:
val pipeline: HttpRequest => Future[HttpResponse] = sendReceive ~> unmarshal[HttpResponse]
optionalCookie("user_session") {
case Some(nameCookie) =>
println("cokkkie " +nameCookie)
pipeline(Get("http://some-url/completions")
~> addCredentials(BasicHttpCredentials("user", "pass"))
~> addHeader("SESSION", nameCookie.content))
case None => complete("No user logged in")
}
说
found : scala.concurrent.Future[spray.http.HttpResponse]
required: spray.routing.RequestContext => Unit
pipeline(Get("http://some-url/completions")
您可以将Cookie处理代码移到匹配项的Some
分支中。像这样(未经测试):
def autorequestService(session: String, jwttoken: String, requestInput: requestInput): Future[HttpResponse] = {
val pipeline: HttpRequest => Future[HttpResponse] = sendReceive ~> unmarshal[HttpResponse]
optionalCookie("user_session") {
case Some(sessionData) =>
println("-------------- Session data ---------------------" + route.toString)
pipeline(Get("http://some-url/completions")
~> addCredentials(BasicHttpCredentials("user", "pass"))
~> addHeader("SESSION", sessionData))
case None =>
complete("No user logged in")
}
}