And*_*rea 69 scala http scalaz
我试图向Web服务发出一个简单的POST请求,该请求返回Scala中的一些XML.
似乎Dispatch是用于此任务的标准库,但我找不到它的文档.我在上面链接的主站点详细解释了什么是承诺以及如何进行异步编程,但实际上并没有记录API.有一个周期表 - 看起来有点可怕 - 但它只对那些已经知道该做什么并且只需要提醒隐藏语法的人有用.
似乎Scalaz也有一些HTTP工具,但我也找不到任何文档.
小智 121
我使用以下内容:https://github.com/scalaj/scalaj-http.
这是一个简单的GET请求:
import scalaj.http.Http
Http("http://foo.com/search").param("q", "monkeys").asString
Run Code Online (Sandbox Code Playgroud)
以及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
Run Code Online (Sandbox Code Playgroud)
Scalaj HTTP可通过SBT获得:
libraryDependencies += "org.scalaj" % "scalaj-http_2.11" % "2.3.0"
Run Code Online (Sandbox Code Playgroud)
你可以使用spray-client.缺少文档(我花了一些时间来了解如何使用查询参数进行GET请求),但如果你已经使用了喷雾,这是一个很好的选择.文档比发送更好.
我们在AI2上使用它而不是发送,因为运营商不那么具有象征性,我们已经在使用喷雾/演员了.
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)
Run Code Online (Sandbox Code Playgroud)
使用我的Requests-Scala库:
// Mill
ivy"com.lihaoyi::requests:0.1.8"
// SBT
"com.lihaoyi" %% "requests" % "0.1.8"
Run Code Online (Sandbox Code Playgroud)
这很简单
val r = requests.get("https://api.github.com/users/lihaoyi")
r.statusCode
// 200
r.headers("content-type")
// Buffer("application/json; charset=utf-8")
r.text
// {"login":"lihaoyi","id":934140,"node_id":"MDQ6VXNlcjkzNDE0MA==",...
Run Code Online (Sandbox Code Playgroud)
val r = requests.post("http://httpbin.org/post", data = Map("key" -> "value"))
val r = requests.put("http://httpbin.org/put", data = Map("key" -> "value"))
val r = requests.delete("http://httpbin.org/delete")
val r = requests.head("http://httpbin.org/head")
val r = requests.options("http://httpbin.org/get")
Run Code Online (Sandbox Code Playgroud)
我正在使用dispatch:http://dispatch.databinder.net/Dispatch.html
他们刚刚发布了一个新版本(0.9.0),带有一个我非常喜欢的全新API.它是异步的.
项目页面示例:
import dispatch._
val svc = url("http://api.hostip.info/country.php")
val country = Http(svc OK as.String)
for (c <- country)
println(c)
Run Code Online (Sandbox Code Playgroud)
编辑:这可能会帮助你https://github.com/dispatch/reboot/blob/master/core/src/main/scala/requests.scala