You can require the entire toolkit in a single line:
//> using toolkit latest
Alternatively, you can require just a specific version of sttp:
//> using dep com.softwaremill.sttp.client4::core:4.0.0-M6
In your build.sbt file, you can add a 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 sttp:
libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M6"
In your build.sc file, you can add a dependency on the Toolkit:
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 sttp:
ivy"com.softwaremill.sttp.client4::core:4.0.0-M6"
Sending an HTTP request
The simplest way to send a request with sttp is quickRequest
.
You can define a GET request with .get
and send it with .send
.
import sttp.client4.quick._
import sttp.client4.Response
val response: Response[String] = quickRequest
.get(uri"https://httpbin.org/get")
.send()
println(response.code)
// prints: 200
println(response.body)
// prints some JSON string
import sttp.client4.quick.*
import sttp.client4.Response
val response: Response[String] = quickRequest
.get(uri"https://httpbin.org/get")
.send()
println(response.code)
// prints: 200
println(response.body)
// prints some JSON string
A Response[String]
contains a status code and a string body.
The request definition
The HTTP method and URI
To specify the HTTP method and URI of a quickRequest
, you can use get
, post
, put
, or delete
.
To construct a URI you can use the uri
interpolator, for e.g. uri"https://example.com"
.
To learn more about that, see How to construct URIs and query parameters?.
The headers
By default, the quickRequest
contains the “Accept-Encoding” and the “deflate” headers.
To add more headers, you can call one of the header
or headers
overloads:
import sttp.client4.quick._
val request = quickRequest
.get(uri"https://example.com")
.header("Origin", "https://scala-lang.org")
println(request.headers)
// prints: Vector(Accept-Encoding: gzip, deflate, Origin: https://scala-lang.org)
import sttp.client4.quick.*
val request = quickRequest
.get(uri"https://example.com")
.header("Origin", "https://scala-lang.org")
println(request.headers)
// prints: Vector(Accept-Encoding: gzip, deflate, Origin: https://scala-lang.org)
sttp can also add “Content-Type” and “Content-Length” automatically if the request contains a body.
Authentication
If you need authentication to access a resource, you can use one of the auth.basic
, auth.basicToken
, auth.bearer
or auth.digest
methods.
import sttp.client4.quick._
// a request with a authentication
val request = quickRequest
.get(uri"https://example.com")
.auth.basic(user = "user", password = "***")
import sttp.client4.quick.*
// a request with a authentication
val request = quickRequest
.get(uri"https://example.com")
.auth.basic(user = "user", password = "***")