如何在Scala中执行HTTP请求?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (3072)

我正在尝试向web服务发出一个简单的POST请求,该请求在Scala中返回一些XML。

Dispatch似乎是用于此任务的标准库,但我找不到它的文档。我上面链接的主站点详细解释了什么是承诺以及如何执行异步编程,但实际上并未记录API。有一个周期表 - 看起来有点可怕 - 但它只对那些已经知道该做什么的人有用,并且只需要提醒那些神秘的语法。

它似乎也是Scala有一些HTTP的设施,但我也找不到任何文档。

提问于
用户回答回答于

我使用以下内容:https//github.com/scalaj/scalaj-http

这是一个简单的GET请求:

import scalaj.http.Http

Http("http://foo.com/search").param("q", "monkeys").asString

以及一个POST的例子:

val result = Http("http://example.com/url").postData("""{"id":"12","json":"data"}""")
  .header("Content-Type", "application/json")
  .header("Charset", "UTF-8")
  .option(HttpOptions.readTimeout(10000)).asString

Scala HTTP可通过SBT获得:

libraryDependencies += "org.scalaj" % "scalaj-http_2.11" % "2.3.0"
用户回答回答于

你可以使用spray-client。

我们在AI2上使用它来调度,因为操作符不太符号,我们已经在使用spray/actor。

import spray.client.pipelining._

val url = "http://youruri.com/yo"
val pipeline: HttpRequest => Future[HttpResponse] = sendReceive

// Post with header and parameters
val responseFuture1: Future[String] = pipeline(Post(Uri(url) withParams ("param" -> paramValue), yourPostData) map (_.entity.asString)

// Post with header
val responseFuture2: Future[String] = pipeline(Post(url, yourPostData)) map (_.entity.asString)

扫码关注云+社区

领取腾讯云代金券