首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调度0.9的基本用法

调度0.9的基本用法
EN

Stack Overflow用户
提问于 2012-09-09 19:07:05
回答 2查看 6.2K关注 0票数 9

我想发布到URL,设置查询参数和头,并在正文中传递一个原始字符串。然后,我希望执行请求并获取输出字符串,以便将其转换为JSON。我还希望异常处理能够响应不同类型的错误(并处理重定向)。

但是Dispatp0.9文档编写得很糟糕,用文档版本破坏了API,而且非常古怪,所以我不能想出一个完整的解决方案。我是,完全卡住了,所以我要求很多。

这是我所能想到的全部,但是设置查询参数是很奇怪的:

代码语言:javascript
运行
复制
val solr = host("localhost", 8983)
val req  = solr / "update" / "json" 
    setQueryParameters( Map( "commit" -> "true")) 
    setHeader( "Content-type", "application/json")
    setBody( a)

但是,设置查询参数会给我一个严重的错误:

代码语言:javascript
运行
复制
<console>:14: error: type mismatch;
 found   : scala.collection.immutable.Map[java.lang.String,java.lang.String]
 required: com.ning.http.client.FluentStringsMap
       val req  = solr / "update" / "json"  setQueryParameters( Map( "commit" -> "true"))

请帮助完全设置请求: HTTPS、重定向、查询参数、标头和POST方法。

还可以帮助执行请求(同步地,我希望这样做),根据响应代码(200、301、302、400、500)获取主体(和头)和分支。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-09 21:23:12

你离我不远。以下应适用于您的请求定义:

代码语言:javascript
运行
复制
import dispatch._

val params = Map("commit" -> "true")
val headers = Map("Content-type" -> "application/json")

val solr = host("localhost", 8983)

val req = solr / "update" / "json" << a <<? params <:< headers

或者,不那么动手术:

代码语言:javascript
运行
复制
val req = url("http://localhost:8983/update/json").POST
  .setBody(a)
  .addQueryParameter("commit", "true")
  .addHeader("Content-type", "application/json")

如果您想要使用HTTPS,可以在其中添加一个.secure

您可以得到这样的承诺(实质上表示延迟请求操作的结果):

代码语言:javascript
运行
复制
val result = Http(req OK as.String).either

然后像这样使用它,例如:

代码语言:javascript
运行
复制
result() match {
  case Right(content)         => println("Content: " + content)
  case Left(StatusCode(404))  => println("Not found")
  case Left(StatusCode(code)) => println("Some other code: " + code.toString)
}

虽然我同意0.9 documentation在某些地方是稀疏的,但它确实提供了一个非常有用的解释,说明了如何使用承诺来处理异步请求操作。

OP的新增部分:这个位为我完成了这个答案。它以一种简单的、阻塞的方式获得响应。

代码语言:javascript
运行
复制
val response = Http(req)()
val body response.getResponseBody
票数 15
EN

Stack Overflow用户

发布于 2012-09-09 20:18:01

我在Dispatch 0.9.1的简单用例中使用了POST,设置如下:

代码语言:javascript
运行
复制
val SERVICES_URL = "http://myhost/mycontext"

val postFields: Map[String, String] = ...
val request = url(SERVICES_URL) << postFields OK as.String
val post = Http(request)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12342062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档