gpt4 book ai didi

scala - 返回确切的响应/标题?

转载 作者:行者123 更新时间:2023-12-02 22:21:36 26 4
gpt4 key购买 nike

从 web 应用程序的客户端,我点击了服务器端路由,它只是第三方 API 的包装器。使用分派(dispatch),我试图让服务器端请求返回 exact header 和第三方 API 对客户端 AJAX 调用的响应。

当我这样做时:

val req = host("third-pary.api.com, 80)
val post = req.as("user", "pass") / "route" << Map("key" -> "akey", "val" -> "aval")
Http(post > as.String)

我总是看到返回到 AJAX 调用的 200 响应(有点符合预期)。我已经看到使用了 Either 语法,但我实际上更像是 Any,因为它只是准确的响应和 header 。怎么写呢?

我应该提到我在服务器端使用 Scalatra,所以本地路由是:

post("/route") {

}

编辑:

这是我正在玩的建议的 Either 匹配示例,但是 match 语法没有意义 - 我不在乎是否有错误,我只是想把它返还。另外,我似乎无法使用此方法返回 BODY。

val asHeaders = as.Response { response =>
println("BODY: " + response.getResponseBody())
scala.collection.JavaConverters.mapAsScalaMapConverter(
response.getHeaders).asScala.toMap.mapValues(_.asScala.toList)
}

val response: Either[Throwable, Map[String, List[String]]] =
Http(post > asHeaders).either()

response match {
case Left(wrong) =>
println("Left: " + wrong.getMessage())
// return Action with header + body
case Right(good) =>
println("Right: " + good)
// return Action with header + body
}

理想情况下,解决方案返回 Scalatra ActionResult(responseStatus(status, reason), body, headers)

最佳答案

使用 Dispatch 获取响应头实际上非常容易。例如 0.9.4:

import dispatch._
import scala.collection.JavaConverters._

val headers: java.util.Map[String, java.util.List[String]] = Http(
url("http://www.google.com")
)().getHeaders

现在,例如:

scala> headers.asScala.mapValues(_.asScala).foreach {
| case (k, v) => println(k + ": " + v)
| }
X-Frame-Options: Buffer(SAMEORIGIN)
Transfer-Encoding: Buffer(chunked)
Date: Buffer(Fri, 30 Nov 2012 20:42:45 GMT)
...

如果你经常这样做,最好将它封装起来,例如:

val asHeaders = as.Response { response =>
scala.collection.JavaConverters.mapAsScalaMapConverter(
response.getHeaders
).asScala.toMap.mapValues(_.asScala.toList)
}

现在您可以编写以下内容:

val response: Either[Throwable, Map[String, List[String]]] =
Http(url("http://www.google.com") OK asHeaders).either()

还有错误检查、漂亮的不可变集合等。

关于scala - 返回确切的响应/标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651153/

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