【发布时间】:2013-05-20 13:32:55
【问题描述】:
我想通过 HTTP POST 请求将 XML 发送到服务器,使用 Spray-client 并设置一些标头等。但是,我能找到的示例仅适用于 JSON 请求。
谁能提供一个简单的sn-p 代码,用于使用spray-client 通过HTTP POST 通信的XML?
谢谢!
【问题讨论】:
标签: scala post spray spray-client
我想通过 HTTP POST 请求将 XML 发送到服务器,使用 Spray-client 并设置一些标头等。但是,我能找到的示例仅适用于 JSON 请求。
谁能提供一个简单的sn-p 代码,用于使用spray-client 通过HTTP POST 通信的XML?
谢谢!
【问题讨论】:
标签: scala post spray spray-client
这是一个小代码示例,用于创建具有基于 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-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"
)
【讨论】:
resolvers += "spray repo" at "http://repo.spray.io" and libraryDependencies += "io.spray" % "spray-can" % "1.0"` 但它抱怨了。
~> 添加标头:spray.io/documentation/spray-httpx/request-building
使用一种很老套的方式来具体说明内容类型。注意负载可以是字符串或 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>
)
)
【讨论】: