2016-08-26 55 views
-1

我HAVA寫了阿卡HTTP客戶端的例子,但我不能讀的HttpResponse體爲字符串,我的代碼如下:如何閱讀整個的HttpResponse體與阿卡流HTTP字符串

import akka.actor.ActorSystem 
import akka.http.scaladsl.Http 
import akka.http.scaladsl.model.{HttpResponse, HttpRequest} 
import akka.stream.ActorMaterializer 
import scala.concurrent.duration._ 

import scala.util.{Failure, Success} 


object TestHttp { 
    def main(args: Array[String]) { 
    implicit val system = ActorSystem() 
    implicit val materializer = ActorMaterializer() 
    implicit val executionContext = system.dispatcher 

    val url = "http://www.baidu.com" 
    println(url) 
    val responseFuture = Http().singleRequest(HttpRequest(uri = url)) 
    responseFuture.andThen { 
     case Success(resp: HttpResponse) => { 
     //println(resp.status.intValue()) 
     //println(resp.status.defaultMessage()) 
     //val aaaa = resp.entity.dataBytes.runFold(ByteString(""))(_ ++ _) 
     //println(aaaa.value.get.get.decodeString("UTF-8")) 
     //println(resp.entity.dataBytes.via(Framing.delimiter(ByteString("\n"),maximumFrameLength = 256,allowTruncation = true)).map(_.utf8String)) 
     val entity = resp.entity.toStrict(5 seconds).map(_.data.decodeString("UTF-8")) 
     println(entity.value.getOrElse("none value")) 
     //nodeCount=JsonUtil.nodeCount(entity.value.get.get) 
    } 
    case Failure(ex:Exception) => { 
     println("http request error:"+ex.getMessage) 
    } 
    } 
} 
} 

和其結果是:

http://www.baidu.com

none值

誰能告訴我爲什麼?以及如何編寫代碼? 非常感謝

回答

0

請立即在一個地方問這個問題是answered on akka-user已經非常迅速後,它被問到。

ScalaDoc of value on Future

如果未來沒有完成,返回值將是無。如果未來完成,如果包含有效結果,則值爲Some(Success(t)),如果包含異常,則值爲Some(Failure(error))。

所以你只是在未來有機會完成之前看看未來,所以它是空的。

而不是使用像maponComplete這樣的操作來檢查它。