POST-запрос с использованием spray-клиента

Я хочу отправить XML через HTTP POST-запрос на сервер, используя спрей-клиент с некоторыми наборами заголовков и т. д. Однако только примеры, которые я могу найти, относятся к запросам JSON.

Может ли кто-нибудь предоставить простой фрагмент кода для связи XML через HTTP POST с использованием спрей-клиента?

Спасибо!


person Željko Trogrlić    schedule 20.05.2013    source источник


Ответы (2)


Вот небольшой пример кода для создания спрея HttpRequest с полезной нагрузкой на основе xml NodeSeq. Дайте мне знать, если вам это поможет или вам нужно больше кода (например, отправить запрос):

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"
)
person cmbaxter    schedule 22.05.2013
comment
что мне нужно для build.sbt, чтобы запустить его? Я добавил resolvers += "spray repo" at "http://repo.spray.io" and libraryDependencies += io.spray % spray-can % 1.0`, но он жалуется. - person Alan Coromano; 08.06.2013
comment
@Мариус Кавански, я добавил соответствующие фрагменты из моего build.sbt. Я надеюсь, что это помогает. - person cmbaxter; 09.06.2013
comment
благодарю вас. но как мне сделать почтовый запрос с заполненными http-заголовками (например, X-Application) и некоторыми пользовательскими почтовыми данными? Однако я могу создать новый вопрос. - person Alan Coromano; 09.06.2013
comment
@Мариус Кавански, да, лучше создать новый вопрос. Но если вам нужен быстрый пример, посмотрите нижнюю часть этой ссылки, где они показывают запрос и добавляют заголовок через ~>: http://spray.io/documentation/spray-httpx/request-building/ - person cmbaxter; 09.06.2013
comment
Я только что сделал -- stackoverflow.com/questions /17008878/ пожалуйста, взгляните. - person Alan Coromano; 09.06.2013

С хакерским способом указать конкретный тип контента. Примечание. Полезная нагрузка может быть строковым или 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>
  )
)
person flurdy    schedule 22.04.2014