2

我想使用 scala 调度库向电梯中的服务器发送一个发布请求。

我想向外部服务器发送一个发布请求并获取一些信息,然后在我的网络应用程序中使用这些信息。

我怎样才能做到这一点?

4

2 回答 2

0

Lift GitHub Wiki(正在被Assembla one取代)有一篇关于根据您的需求使用 Dispatch的文章。

于 2010-04-17T23:51:48.140 回答
0

这是一个将 REST 调用分派到服务器的片段:

    val http = new Http
    val call = parse(event.call)
    val verbspec = (call \ "verb").values toString
    val urlspec = (call \ "url").values toString
    val namespec = (call \ "username").values toString
    val pwspec = (call \ "password").values toString

    val req = url(urlspec).as(namespec, pwspec) <:< Map("Content" -> "application/json")

    val (status: Int, contentWrap,  headers) = verbspec match {
      case "GET" => {
        http x (( req >:> identity ) {
          case (200, _, Some(thing),  out) => {
            val resp = fromInputStream(thing.getContent()).getLines.mkString
            (200, Some(resp), out())
          }
          case (badCode, _, _, out) => (badCode, None, out())
        })
      }
      case "POST" => {
        http x (( req.POST << (event.payload) >:> identity ) {case (status,  _, _, out) => (status,  None, out()) })
      }
      case "PUT" => {
        http x (( req.PUT <<< (event.payload) >:> identity ) {case (status,  _, _,  out) => (status,  None, out()) })
      }
      case _ => {
        EventHandler.error(this, "Bad verb specified")
        (000,  None, Map.empty)
      }
    }

在哪里:

event.call-> json 指定调用

event.payload-> 用于 PUT 和 POST 的 json 有效负载

http x-> http://databinder.net/dispatch-doc/#dispatch.Http

>:> -> http://databinder.net/dispatch-doc/#dispatch.HandlerVerbs

<<, <<<, <:< -> http://databinder.net/dispatch-doc/#dispatch.RequestVerbs

这使用 Lift JSON 来解析调用规范并在 Akka actor 中执行。状态、标题和内容返回给调用者。

于 2011-12-10T02:27:49.763 回答