2013-06-09 40 views
8

spray çerçevesini kullanarak basit bir HTTP isteği oluşturmam gerekiyor. Web sitelerinde bazı örnekler buldum ama onlar benim için gerekli olmayan karmaşık ve Akka'yı içerecek şekilde ortaya çıktı.Spreyde bir gönderi isteği gönderme

Ayrıca, ben ve (X-Application, content-type, vb gibi) tabii ki, bir taleplere post verileri (benim durumumda, JSON bir veri olacaktır) bir isteğin başlıklarında doldurmak gerekiyor.

Peki bunu nasıl yaparım?

+0

Sen farkında mısın olduğunu Sprey çerçevesinin temel bir parçası doğru mu? Doğrudan bununla etkileşime girmenize gerek olmayabilir, ancak spreyin üzerine inşa edildiği birincil yapı taşıdır. – cmbaxter

+0

@cmbaxter yine de, bunun nasıl yapılacağına dair basit bir örneğe ihtiyacım var, bu yüzden bu noktada akka'yı kullanmak istemiyorum. –

+0

Bu sayfayı gördünüz mü: http://spray.io/documentation/1.1-M8/spray-client. Verimli bir kullanım için hala bazı sprey kavramlarını anlamanız gerekecektir. – jrudolph

cevap

13

İşte bir örnek. Orada Akka kod az miktarda olacak ama benim yorumunda belirtildiği gibi, bu sprey için gerekli olan:

Benim inşa dosyası şuna benzer
import spray.httpx.RequestBuilding._ 
import spray.http._ 
import HttpMethods._ 
import HttpHeaders._ 
import MediaTypes._ 
import spray.json._ 
import DefaultJsonProtocol._ 
import spray.httpx.SprayJsonSupport._ 
import akka.actor.ActorSystem 
import spray.io.IOExtension 
import akka.actor.Props 
import spray.can.client.HttpClient 
import spray.client.HttpConduit 
import scala.concurrent.Future 
import scala.util.Failure 
import scala.util.Success 

case class MyObj(str:String, i:Int) 

object SprayExample { 
    implicit val myObjFormat = jsonFormat2(MyObj) 

    def main(args: Array[String]) { 
    import concurrent.ExecutionContext.Implicits._ 

    val obj = MyObj("hello", 1) 
    val req = Post("/some/url", obj) ~> addHeader("X-Foo", "bar") 

    implicit val system = ActorSystem() 
    val ioBridge = IOExtension(system).ioBridge() 
    val httpClient = system.actorOf(Props(new HttpClient(ioBridge))) 

    val conduit = system.actorOf(
     props = Props(new HttpConduit(httpClient, "localhost", 8080)), 
     name = "http-conduit" 
    ) 

    val pipeline = HttpConduit.sendReceive(conduit) 
    val response: Future[HttpResponse] = pipeline(req) 
    response onComplete{ 
     case Failure(ex) => ex.printStackTrace() 
     case Success(resp) => println("success: " + resp.status) 
    } 
    } 
} 

:

o akka
scalaVersion := "2.10.0" 

resolvers ++= Seq(
    "Scala Tools Repo Releases" at "http://scala-tools.org/repo-releases", 
    "Typesafe Repo Releases" at "http://repo.typesafe.com/typesafe/releases/", 
    "spray" at "http://repo.spray.io/" 
) 


libraryDependencies ++= Seq(
    "io.spray" % "spray-httpx" % "1.1-M7", 
    "io.spray" % "spray-client" % "1.1-M7", 
    "com.typesafe.akka" %% "akka-actor" % "2.1.0", 
    "io.spray" %% "spray-json" % "1.2.5" 
) 
İlgili konular