在Akka Http中创建HTTPS连接

时间:2016-10-26 22:56:52

标签: scala akka akka-stream akka-http

在文档" http://doc.akka.io/docs/akka/2.4.11/scala/http/client-side/client-https-support.html#hostname-verification"它表示使用了outgoingConnectionTls,但该方法名称似乎已更改为outgoingConnectionHttps。

我有代码工作(将json响应作为字符串给出)使用可行的akka​​-http-core 1.0,但更新到最新版本(2.4.xx)似乎打破了它,即使它看起来像新的命名outgoingConnectionHttps就是所有改变的。现在我的结果就是" List()"当我尝试解组响应实体时。

任何人都可以帮忙吗?正在运行的代码如下所示

package com.packt.akka

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model._
import akka.http.scaladsl.model.headers.BasicHttpCredentials
import akka.http.scaladsl.model.StatusCodes._
import akka.http.scaladsl.unmarshalling.Unmarshal
import akka.stream.ActorMaterializer
import akka.stream.scaladsl._
import com.typesafe.config.ConfigFactory

import scala.concurrent.Future

object JiraConnectionLevel extends App {
  implicit val system = ActorSystem()
  implicit val materializer = ActorMaterializer()

  implicit val ec = system.dispatcher

  val config = ConfigFactory.load()


  val name = config.getString("auth.jira.user")
  val password = config.getString("auth.jira.password")
  val host = config.getString("services.jira.host")
  val jiraUri = config.getString("services.jira.uri")

  val authorization = headers.Authorization(BasicHttpCredentials(name, password))

  val connectionFlow: Flow[HttpRequest, HttpResponse, Future[Http.OutgoingConnection]]=
    //This is where the method name changed it was Http().outgoingConnectionTls(host) which worked
    Http().outgoingConnectionHttps(host)



  val responseFuture =
    Source.single(HttpRequest(headers = List(authorization),uri = jiraUri))
    .via(connectionFlow)
    .runWith(Sink.head)

  responseFuture map { res =>
    res.status match {
      case OK =>
        println(s"Response is:"+ Unmarshal(res.entity).to[String])
          }
      case _ =>
        Unmarshal(res.entity).to[String].map { body =>
          println(s"The response status is ${res.status} and response body is ${body}")
          shutdown()
        }
    }
  }

  def shutdown() = {
    Http().shutdownAllConnectionPools().onComplete{ _ =>
      system.shutdown()
      system.awaitTermination()
    }

  }

}

0 个答案:

没有答案