我想通过 HTTP POST 请求将 XML 发送到服务器,使用 Spray-client 并设置一些标头等。但是,我能找到的只有 JSON 请求的示例。
有人可以使用 Spray-client 通过 HTTP POST 通信提供 XML 的简单代码片段吗?
谢谢!
我想通过 HTTP POST 请求将 XML 发送到服务器,使用 Spray-client 并设置一些标头等。但是,我能找到的只有 JSON 请求的示例。
有人可以使用 Spray-client 通过 HTTP POST 通信提供 XML 的简单代码片段吗?
谢谢!
这是一个小代码示例,用于创建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-client
和spray-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"
)
使用一种 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>
)
)