小编Uri*_*Dev的帖子

使用Scala Dispatch Library禁用SSL

我目前正在将所有Rest测试移动到CI服务器,并注意到所有测试都因SSL握手而失败,现在我已经使用我们的Java测试套件成功禁用了TrustManager,但我不确定如何使用Scala调度库来完成它,并且还没有找到可以在这种情况下应用的许多示例.

val JSONstr = "{samplekey:samplevalue}"
val response:String = Http(url("https://www.host.com/path/to/post") 
                    << (checkInJSONstr, "application/json") as_str) 
Run Code Online (Sandbox Code Playgroud)

正如预期发生以下异常:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at     com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
...
Run Code Online (Sandbox Code Playgroud)

有没有办法干净地语法上忽略使用调度库的SSL?

ssl https scala scala-dispatch

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

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
查看次数

scala - 调度示例不起作用

我正在关注调度文档中的第一个示例-

    val svc = url("http://api.hostip.info/country.php")
    val country = Http(svc OK as.String)
    for (c <- country)
      println(c)
Run Code Online (Sandbox Code Playgroud)

我没有打印任何输出.当我将其更改为下面以进行阻塞调用时,我得到输出.

val res = country()
println(res)
Run Code Online (Sandbox Code Playgroud)

需要帮助.

完整的程序 -

import dispatch._
object DispatchTest {

  def main(args: Array[String]) {
    val svc = url("http://api.hostip.info/country.php")
    val country = Http(svc OK as.String)
    for (c <- country)
      println(c)
  }
}
Run Code Online (Sandbox Code Playgroud)

scala scala-dispatch

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

返回确切的响应/标题?

从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 ×8

scala-dispatch ×8

http ×2

ssl ×2

concurrency ×1

databinder ×1

header ×1

https ×1

json ×1

post ×1

request ×1