有没有办法让Scala代码忽略ssl验证?

问题描述

我正在尝试下载我的Facebook个人资料图像。我成功地使用oauth连接并获取所有正确的令牌,facebook API告诉我个人资料图片的网址。

但是,当我尝试检索它时,出现关于无效tls的错误。我提供了一些scala代码,这些代码显示了如何下载图像。如果更改为http,我可以得到它。但https失败。有人可以建议原因吗?我需要忽略ssl验证吗?

我在build.sbt中使用net.databinder.dispatch %% dispatch-core%0.11.2

scala> import dispatch.Defaults._
scala> import dispatch._
scala> import scala.concurrent.Await
scala> import scala.concurrent.duration._

scala>   def fetchUrl( uri : String ) : Array[Byte] = {
     |     val svc = url(uri)
     |     val future_img = Http(svc OK as.Bytes)
     |     Await.result(future_img,Duration(10,"seconds"))
     |
     |     future_img()
     |   }
fetchUrl: (uri: String)Array[Byte]

scala> fetchUrl("https://scontent-syd2-1.xx.fbcdn.net/v/t1.0-1/p200x200/12347856_10153070551591710_2899469599397194349_n.jpg?_nc_cat=105&_nc_sid=dbb9e7&_nc_ohc=1wqEuhGf4S4AX_iqrx5&_nc_ht=scontent-syd2-1.xx&tp=6&oh=4a792c1f0f4eded4ff2516efdfb056ab&oe=5F8D2DC4")

抛出无效的ss / tls记录

21:08:00.295 [New I/O worker #1] DEBUG c.n.h.c.p.n.NettyAsyncHttpProvider - Unexpected I/O exception on channel [id: 0xa80fd837,/10.0.0.16:59254 => scontent-syd2-1.xx.fbcdn.net/157.240.8.23:443]
org.jboss.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: 

如果我将https更改为http,那么它将起作用。另外,如果我将URI粘贴到浏览器地址栏中,它会作为https并报告证书有效。

scala> fetchUrl("http://scontent-syd2-1.xx.fbcdn.net/v/t1.0-1/p200x200/12347856_10153070551591710_2899469599397194349_n.
jpg?_nc_cat=105&_nc_sid=dbb9e7&_nc_ohc=1wqEuhGf4S4AX_iqrx5&_nc_ht=scontent-syd2-1.xx&tp=6&oh=4a792c1f0f4eded4ff2516efdfb
056ab&oe=5F8D2DC4")

scala> fetchUrl("http://scontent-syd2-1.xx.fbcdn.net/v/t1.0-1/p200x200/12347856_10153070551591710_2899469599397194349_n.
jpg?_nc_cat=105&_nc_sid=dbb9e7&_nc_ohc=1wqEuhGf4S4AX_iqrx5&_nc_ht=scontent-syd2-1.xx&tp=6&oh=4a792c1f0f4eded4ff2516efdfb
056ab&oe=5F8D2DC4")

056ab&oe=5F8D221:08:53.263 [New I/O worker #3] DEBUG c.n.h.c.p.netty.NettyConnectionsPool - Adding uri: http://scontent-syd2-1.xx.fbcdn.net:80 for channel [id: 0xa499e1d5,/10.0.0.16:59341 => scontent-syd2-1.xx.fbcdn.net/157.240.8.23:80]
res1: Array[Byte] = Array(-1,-40,-1,-32,16,74,70,73,1,-19,-100,80,104,111,116,115,112,32,51,46,48,56,66,77,4,-128,28,2,103,20,107,50,105,81,53,57,85,55,72,45,110,119,106,75,40,98,68,97,49,99,52,102,100,101,54,-37,67,6,5,7,...

解决方法

我的build.sbt也带来了0.8.10的dispatch-core。我仍然有问题,但将发布另一个问题。消除对0.8.10的依赖关系解决了ssl问题。