标签: scala-dispatch

http(/*参数在这里*/)如何在没有显式或隐式方法的情况下使用此Object(Http)?

在使用Databinder Dispatch使用Json进行编码的示例中,Nathan使用了一个没有方法的Object(Http),如下所示:

import dispatch._
import Http._
Http("http://www.fox.com/dollhouse/" >>> System.out )
Run Code Online (Sandbox Code Playgroud)

他是怎么做到的?

谢谢你所有的答案,不幸的是我不够具体......

看起来它只是将一个参数传递给类或伴随对象Http的构造函数.

在另一个例子中,我看到了另一种形式:

http = new Http
http(/* argument here */)
Run Code Online (Sandbox Code Playgroud)

这是有效的Scala吗?我想它一定是,因为作者是Scala专家.但这对我没有意义.动作通常通过调用对象上的方法来执行,无论是显式地为object.doSomething()还是隐式地为object = something(使用语法糖下的apply()方法).

我能想到的是构造函数除了用于构造对象之外还用于执行某些操作.换句话说,它具有副作用,例如在这种情况下,在网络上做一些事情.

scala databinder scala-dispatch

3
推荐指数
1
解决办法
328
查看次数

在 Dispatch 和 Scala 中使用 JSON POST 请求

我在使用 Dispatch 和 Scala 使用 JSON 对象发出 POST 请求时遇到问题。

POST 请求肯定可以正常工作,因为我使用 curl 对其进行了测试:

~/workspace $ curl -vd 'tracker={"project":"campaign","event":"home","number":"100"}'  http://exampleurl:8145/test
Run Code Online (Sandbox Code Playgroud)

我得到了预期的 HTTP 200 响应

但是当我尝试使用 Dispatch 库(http://dispatch.databinder.net/Dispatch.html)做同样的事情时:

scala> Http(url("http://exampleurl:8145/test") << "tracker={'project':'campaign','event':'home','number':'100'}" >|)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

dispatch.StatusCode: Unexpected response code: 404
Paramerter missing: [tracker] not found
at dispatch.HttpExecutor$$anonfun$when$1.apply(executor.scala:53)
at dispatch.HttpExecutor$$anonfun$when$1.apply(executor.scala:50)
at dispatch.HttpExecutor$$anonfun$x$2.apply(executor.scala:41)
at dispatch.HttpExecutor$$anonfun$x$2.apply(executor.scala:36)
at dispatch.BlockingHttp$$anonfun$execute$1.apply(Http.scala:54)
at dispatch.Http.pack(Http.scala:25)
at dispatch.BlockingHttp$class.execute(Http.scala:53)
at dispatch.Http.execute(Http.scala:21)
at dispatch.HttpExecutor$class.x(executor.scala:36)
at dispatch.Http.x(Http.scala:21)
at dispatch.HttpExecutor$class.when(executor.scala:50)
at dispatch.Http.when(Http.scala:21)
at dispatch.HttpExecutor$class.apply(executor.scala:60)
at dispatch.Http.apply(Http.scala:21)
at .<init>(<console>:11)
at .<clinit>(<console>)
at .<init>(<console>:11)
at .<clinit>(<console>) …
Run Code Online (Sandbox Code Playgroud)

post json scala scala-dispatch

3
推荐指数
1
解决办法
5481
查看次数

返回确切的响应/标题?

从webapp的客户端,我点击了服务器端路由,它只是第三方API的包装器.使用dispatch,我试图让服务器端请求返回第三方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)
Run Code Online (Sandbox Code Playgroud)

我总是看到一个200响应返回到AJAX调用(有点预期).我已经看到了Either使用的语法,但我真的更像是一个Any,因为它只是确切的响应和标题.怎么写?

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

post("/route") {

}
Run Code Online (Sandbox Code Playgroud)

编辑:

这是我正在玩的建议的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 …
Run Code Online (Sandbox Code Playgroud)

scala scala-dispatch

2
推荐指数
1
解决办法
1858
查看次数

在"Dispatch"库中等待超时响应

我将使用Dispatch编写一个简单的HTTP客户端.我打电话dispatch.Http给未来,并呼吁未来得到回应

val request = ...
val future = Http(request) // call the server asynchronously
val response = future() // wait for the response from the server

现在我想知道如何等待超时.我想最后一次API调用是:

// throw an exception if no response received within timeout
val response = future(timeout: Long)

是否有意义 ?

我理解Dispatch返回scala.concurrent.Future,它不提供API超时.你会如何建议我实施它?

concurrency scala http scala-dispatch

2
推荐指数
1
解决办法
1840
查看次数

如何在调度请求中获取响应头和主体?

我想从调度请求中获取正文和标头。这该怎么做?

val response = Http(request OK as.String)
for (r <- response) yield {
  println(r.toString) //prints body
  // println(r.getHeaders) // ???? how to print headers here ???? 
}
Run Code Online (Sandbox Code Playgroud)

scala header http request scala-dispatch

2
推荐指数
1
解决办法
1610
查看次数

在Scala调度中忽略SSL证书

尝试使用未正确配置的SSL证书时,我收到以下错误:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:562)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at dispatch.BlockingHttp$class.dispatch$BlockingHttp$$execute(Http.scala:45)
at dispatch.BlockingHttp$$anonfun$execute$1$$anonfun$apply$3.apply(Http.scala:58)
at dispatch.BlockingHttp$$anonfun$execute$1$$anonfun$apply$3.apply(Http.scala:58)
at scala.Option.getOrElse(Option.scala:108)
at dispatch.BlockingHttp$$anonfun$execute$1.apply(Http.scala:58)
at dispatch.Http.pack(Http.scala:25)
at dispatch.BlockingHttp$class.execute(Http.scala:53)
at dispatch.Http.execute(Http.scala:21)
at dispatch.HttpExecutor$class.x(executor.scala:36)
at dispatch.Http.x(Http.scala:21)
at dispatch.HttpExecutor$class.when(executor.scala:50)
at dispatch.Http.when(Http.scala:21)
at dispatch.HttpExecutor$class.apply(executor.scala:60)
at dispatch.Http.apply(Http.scala:21)
at com.secondmarket.cobra.lib.delegate.UsersBDTest.tdsGet(UsersBDTest.scala:130)
at com.secondmarket.cobra.lib.delegate.UsersBDTest.setup(UsersBDTest.scala:40)
Run Code Online (Sandbox Code Playgroud)

我想完全忽略证书.

更新:我理解有关不正确配置的SSL证书的技术问题,问题不在于我们的盒子,而是我们正在使用的服务.它主要发生在测试盒而不是prod/stg上,因此我们正在调查但需要测试API.

ssl scala scala-dispatch

1
推荐指数
1
解决办法
2554
查看次数

使用 Scala 中的映射链接多个方法调用

我有以下使用 Dispatch 0.11 的代码:

def myHttpPut(urlToPut: String, params: Map[String, String]): Future[Response] = {
  val req = url(urlToPut).PUT
  params.foreach { case (k, v) => req.addParameter(k, v) }
  Http(req)
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 addParameter 不会修改 req - 相反,它会生成一个添加了参数的新 req 对象(在这种情况下,它被丢弃了)。写这个的最优雅的方法是什么,以便我基本上循环遍历参数,使用映射的每个键/值对调用 addParameter,构建 req 直到我将它传递给 Http(req)?

scala scala-dispatch

1
推荐指数
1
解决办法
1439
查看次数

标签 统计

scala ×7

scala-dispatch ×7

http ×2

concurrency ×1

databinder ×1

header ×1

json ×1

post ×1

request ×1

ssl ×1