【问题标题】:POST request using spray-client使用喷雾客户端的 POST 请求
【发布时间】:2013-05-20 13:32:55
【问题描述】:

我想通过 HTTP POST 请求将 XML 发送到服务器,使用 Spray-client 并设置一些标头等。但是,我能找到的示例仅适用于 JSON 请求。

谁能提供一个简单的sn-p 代码,用于使用spray-client 通过HTTP POST 通信的XML?

谢谢!

【问题讨论】:

    标签: scala post spray spray-client


    【解决方案1】:

    这是一个小代码示例,用于创建具有基于 xml NodeSeq 的有效负载的喷雾 HttpRequest。如果这对您有帮助或者您是否需要更多代码(例如提交请求),请告诉我:

    import spray.httpx.RequestBuilding._
    import spray.http._
    import HttpMethods._
    import HttpHeaders._
    import MediaTypes._
    
    object SprayXml {
      def main(args: Array[String]) {
        val xml = <root>foo</root>
        val req = Post("/some/url", xml)
      }
    }
    

    我用来使这段代码工作的两个依赖项是spray-clientspray-httpx

    我的 build.sbt 中的相关部分是:

    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"
    )
    

    【讨论】:

    • 我需要什么 build.sbt 才能运行它?我添加了resolvers += "spray repo" at "http://repo.spray.io" and libraryDependencies += "io.spray" % "spray-can" % "1.0"` 但它抱怨了。
    • @Marius Kavansky,我从 build.sbt 添加了相关部分。我希望它有所帮助。
    • 谢谢。但是如何使用填充的 http 标头(如 X-Application)和一些自定义发布数据来发出发布请求?不过,我可以创建一个新问题。
    • @Marius Kavansky,是的,创建一个新问题可能是一个更好的主意。但是,如果您想要一个简单的示例,请查看此链接的底部,其中显示请求并通过 ~&gt; 添加标头:spray.io/documentation/spray-httpx/request-building
    • 我刚刚做了 -- stackoverflow.com/questions/17008878/… 请看一下。
    【解决方案2】:

    使用一种很老套的方式来具体说明内容类型。注意负载可以是字符串或 xml 文字。

    import spray.client.pipelining._
    import spray.http._
    
    val pipeline: HttpRequest => Future[HttpResponse] = {
       addHeader("My-Header-Key", "myheaderdata") ~>
       ((_:HttpRequest).mapEntity( _.flatMap( f => HttpEntity( 
          f.contentType.withMediaType(MediaTypes.`application/xml`),f.data)))) 
         ~> sendReceive
    }
    
    pipeline(
      Post(
         "http://www.example.com/myendpoint", <MyXmlTag>MyXmlData</MyXmlTag>
      )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多