你可以在一行中要求整个工具包
//> using toolkit latest
或者,你只需要求 sttp 的特定版本
//> using dep com.softwaremill.sttp.client4::core:4.0.0-M1
在你的 build.sbt 文件中,你可以添加对 Toolkit 的依赖项
lazy val example = project.in(file("example"))
.settings(
scalaVersion := "3.2.2",
libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
)
或者,你只需要求 sttp 的特定版本
libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M1"
在你的 build.sc 文件中,你可以添加对 Toolkit 的依赖项
object example extends ScalaModule {
def scalaVersion = "3.2.2"
def ivyDeps =
Agg(
ivy"org.scala-lang::toolkit:0.1.7"
)
}
或者,你只需要求 sttp 的特定版本
ivy"com.softwaremill.sttp.client4::core:4.0.0-M1"
uri
插值器
uri
是一个自定义 字符串插值器,它允许你创建有效的网络地址,也称为 URI。例如,你可以编写 uri"https://example.com/"
。
您可以使用常见的 $
或 ${}
语法在 URI 中插入任何变量或表达式。例如 uri"https://example.com/$name"
,将变量 name
的值插入到 URI 中。如果 name
包含 "peter"
,结果为 https://example.com/peter
。
uri
会自动转义特殊字符,如下例所示
import sttp.client4.quick._
import sttp.model.Uri
val book = "programming in scala"
val bookUri: Uri = uri"https://example.com/books/$book"
println(bookUri)
// prints: https://example.com/books/programming%20in%20scala
import sttp.client4.quick.*
import sttp.model.Uri
val book = "programming in scala"
val bookUri: Uri = uri"https://example.com/books/$book"
println(bookUri)
// prints: https://example.com/books/programming%20in%20scala
查询参数
查询参数是附加到 HTTP 请求 URI 末尾的一对键值,用于指定有关请求的其他详细信息。Web 服务器可以使用这些参数来计算适当的响应。
例如,考虑以下 URL
https://example.com/search?q=scala&limit=10&page=1
它包含三个查询参数:q=scala
、limit=10
和 page=1
。
使用查询参数映射
uri
插值器可以将 Map[String, String]
插值成查询参数
val queryParams = Map(
"q" -> "scala",
"limit" -> "10",
"page" -> "1"
)
val uriWithQueryParams = uri"https://example.com/search?$queryParams"
println(uriWithQueryParams)
// prints: https://example.com/search?q=scala&limit=10&page=1
为了安全起见,插值器会自动转义参数中的特殊字符。
使用可选查询参数
查询参数可能是可选的。uri
插值器可以插值 Option
def getUri(limit: Option[Int]): Uri =
uri"https://example.com/all?limit=$limit"
println(getUri(Some(10)))
// prints: https://example.com/all?limit=100
println(getUri(None))
// prints: https://example.com/all
请注意,当 limit
为 None
时,查询参数会完全消失。
使用序列作为单个查询参数的值
查询参数可以在 URI 中重复,以表示值列表。例如,?version=1.0.0&version=1.0.1&version=1.1.0
中的 version
参数包含 3 个值:1.0.0
、1.0.1
和 1.1.0
。
要在 URI 中构建此类查询参数,可以在 uri"..."
中内插一个 Seq
(或 List
、Array
等)。
def getUri(versions: Seq[String]): Uri =
uri"https://example.com/scala?version=$versions"
println(getUri(Seq("3.2.2")))
// prints: https://example.com/scala?version=3.2.2
println(getUri(Seq("2.13.8", "2.13.9", "2.13.10")))
// prints: https://example.com/scala?version=2.13.8&version=2.13.9&version=2.13.10
println(getUri(Seq.empty))
// prints: https://example.com/scala