Using Scala CLI, you can require the entire toolkit in a single line:
//> using toolkit latest
Alternatively, you can require just a specific version of UPickle:
//> using dep com.lihaoyi::upickle:3.1.0
In your build.sbt file, you can add the dependency on the Toolkit:
lazy val example = project.in(file("."))
.settings(
scalaVersion := "3.3.4",
libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
)
Alternatively, you can require just a specific version of UPickle:
libraryDependencies += "com.lihaoyi" %% "upickle" % "3.1.0"
In your build.sc file, you can add the dependency to the upickle library:
object example extends ScalaModule {
def scalaVersion = "3.3.4"
def ivyDeps =
Agg(
ivy"org.scala-lang::toolkit:0.1.7"
)
}
Alternatively, you can require just a specific version of UPickle:
ivy"com.lihaoyi::upickle:3.1.0"
Asynchronous requests
To send a request asynchronously you can use a 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)
You can learn more about Future
-based backends in the sttp documentation.
sttp supports other asynchronous wrappers such as Monix Task
s, cats-effect Effect
s, ZIO’s ZIO
type, and more.
You can see the full list of supported backends here.
Websockets
You can use a DefaultFutureBackend
to open a websocket, as follows.
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
Learn more about WebSockets in sttp documentation.
More features
You can discover many more features such as streaming, logging, timeouts, and more in sttp documentation.