使用 Scala CLI,您可以在一行中要求整个工具包
//> using toolkit latest
或者,您只需要求特定版本的 UPickle
//> using dep com.lihaoyi::upickle:3.1.0
在您的 build.sbt 文件中,您可以添加对工具包的依赖项
lazy val example = project.in(file("example"))
.settings(
scalaVersion := "3.2.2",
libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
)
或者,您只需要求特定版本的 UPickle
libraryDependencies += "com.lihaoyi" %% "upickle" % "3.1.0"
在您的 build.sc 文件中,您可以添加对 upickle 库的依赖项
object example extends ScalaModule {
def scalaVersion = "3.2.2"
def ivyDeps =
Agg(
ivy"org.scala-lang::toolkit:0.1.7"
)
}
或者,您只需要求特定版本的 UPickle
ivy"com.lihaoyi::upickle:3.1.0"
异步请求
若要异步发送请求,您可以使用 DefaultFutureBackend
import scala.concurrent.Future
import sttp.client4._
val asyncBackend = DefaultFutureBackend()
val response: Future[Response[String]] = quickRequest
.get(uri"https://example.com")
.send(asyncBackend)
import scala.concurrent.Future
import sttp.client4.*
val asyncBackend = DefaultFutureBackend()
val response: Future[Response[String]] = quickRequest
.get(uri"https://example.com")
.send(asyncBackend)
您可以在 sttp 文档 中了解有关基于 Future
的后端的更多信息。
sttp 支持其他异步包装器,例如 Monix Task
、cats-effect Effect
、ZIO 的 ZIO
类型等。您可以在 此处 查看受支持后端的完整列表。
Websocket
你可以使用 DefaultFutureBackend
打开一个 websocket,如下所示。
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import sttp.client4._
import sttp.ws.WebSocket
val asyncBackend = DefaultFutureBackend()
def useWebSocket(ws: WebSocket[Future]): Future[Unit] =
for {
_ <- ws.sendText("Hello")
text <- ws.receiveText()
} yield {
println(text)
}
val response = quickRequest
.get(uri"wss://ws.postman-echo.com/raw")
.response(asWebSocketAlways(useWebSocket))
.send(asyncBackend)
Await.result(response, Duration.Inf)
// prints: Hello
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import sttp.client4.*
import sttp.ws.WebSocket
val asyncBackend = DefaultFutureBackend()
def useWebSocket(ws: WebSocket[Future]): Future[Unit] =
for
_ <- ws.sendText("Hello")
text <- ws.receiveText()
yield
println(text)
val response = quickRequest
.get(uri"wss://ws.postman-echo.com/raw")
.response(asWebSocketAlways(useWebSocket))
.send(asyncBackend)
Await.result(response, Duration.Inf)
// prints: Hello
在 sttp 文档 中了解有关 Websocket 的更多信息。
更多功能
你可以在 sttp 文档 中发现更多功能,例如流、日志记录、超时等等。