0

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

有人可以使用 Spray-client 通过 HTTP POST 通信提供 XML 的简单代码片段吗?

谢谢!

4

2 回答 2

4

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

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"
)
于 2013-05-22T00:57:20.080 回答
0

使用一种 hacky 方式来具体说明内容类型。注意有效负载可以是字符串或 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>
  )
)
于 2014-04-22T17:01:47.677 回答