gpt4 book ai didi

scala - Akka Http 客户端在 HttpRequest 上设置 Cookie

转载 作者:行者123 更新时间:2023-12-02 08:19:18 26 4
gpt4 key购买 nike

我正在尝试使用 Akka Http 客户端向 REST Web 服务发出 GET 请求。

在进行 GET 之前,我不知道如何在请求上设置 cookie。

我搜索了网络,找到了在服务器端读取 cookie 的方法。但我找不到任何可以告诉我如何根据客户端请求设置 cookie 的内容。

根据我自己的研究,我尝试了以下方法在 http 请求上设置 cookie

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.unmarshalling.Unmarshal
import akka.stream.scaladsl.{Sink, Source}
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
import akka.http.scaladsl.model.headers.HttpCookie
import akka.stream.ActorMaterializer
import spray.json._

import scala.util.{Failure, Success}

case class Post(postId: Int, id: Int, name: String, email: String, body: String)

trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
implicit val postFormat = jsonFormat5(Post.apply)
}

object AkkaHttpClient extends JsonSupport{
def main(args: Array[String]) : Unit = {
val cookie = headers.`Set-Cookie`(HttpCookie(name="foo", value="bar"))
implicit val system = ActorSystem("my-Actor")
implicit val actorMaterializer = ActorMaterializer()
implicit val executionContext = system.dispatcher
val mycookie = HttpCookie(name="foo", value="bar")
val httpClient = Http().outgoingConnection(host = "jsonplaceholder.typicode.com")
val request = HttpRequest(uri = Uri("/comments"), headers = List(cookie))
val flow = Source.single(request)
.via(httpClient)
.mapAsync(1)(r => Unmarshal(r.entity).to[List[Post]])
.runWith(Sink.head)

flow.andThen {
case Success(list) => println(s"request succeded ${list.size}")
case Failure(_) => println("request failed")
}.andThen {
case _ => system.terminate()
}
}
}

但是这样会报错

[WARN] [08/05/2016 10:50:11.134] [my-Actor-akka.actor.default-dispatcher-3] [akka.actor.ActorSystemImpl(my-Actor)] 
HTTP header 'Set-Cookie: foo=bar' is not allowed in requests

最佳答案

为 akka-http 客户端构造任何 header 的惯用方法是使用 akka.http.scaladsl.model.headers

在你的情况下是

val cookieHeader = akka.http.scaladsl.model.headers.Cookie("name","value")
HttpRequest(uri = Uri("/comments"), headers = List(cookieHeader, ...))

关于scala - Akka Http 客户端在 HttpRequest 上设置 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38792846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com