如何使用scala dispatch库向Lift中的服务器发送post请求?

时间:2010-01-25 02:43:48

标签: scala lift scala-dispatch

我想使用scala dispatch库向Lift中的服务器发送一个post请求。

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

我该怎么做?

2 个答案:

答案 0 :(得分:0)

电梯GitHub Wiki(正由Assembla one取代)的article on using Dispatch与您所寻求的一致。

答案 1 :(得分: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 - &gt; json指定调用

event.payload - &gt; PUT和POST的json有效负载

http x - &gt; http://databinder.net/dispatch-doc/#dispatch.Http

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

<<<<<<:< - &gt; http://databinder.net/dispatch-doc/#dispatch.RequestVerbs

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