Scala 工具包

如何发送请求?

语言

你可以在一行中要求整个工具包

//> using toolkit latest

或者,你只需要求 sttp 的特定版本

//> using dep com.softwaremill.sttp.client4::core:4.0.0-M1

在你的 build.sbt 文件中,你可以添加对工具包的依赖项

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 文件中,你可以添加对工具包的依赖项

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"

发送 HTTP 请求

使用 sttp 发送请求的最简单方法是 quickRequest

你可以使用 .get 定义一个 GET 请求,并使用 .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

一个 Response[String] 包含一个状态代码和一个字符串主体。

请求定义

HTTP 方法和 URI

要指定 quickRequest 的 HTTP 方法和 URI,可以使用 getpostputdelete

要构建一个 URI,可以使用 uri 插值器,例如 uri"https://example.com"。要了解更多信息,请参阅 如何构建 URI 和查询参数?

标题

默认情况下,quickRequest 包含“Accept-Encoding”和“deflate”标题。要添加更多标题,可以调用 headerheaders 重载之一

import sttp.client4.quick._

val request = quickRequest
  .get(uri"https://example.com")
  .header("Origin", "https://scala-lang.org.cn")

println(request.headers)
// prints: Vector(Accept-Encoding: gzip, deflate, Origin: https://scala-lang.org.cn)
import sttp.client4.quick.*

val request = quickRequest
  .get(uri"https://example.com")
  .header("Origin", "https://scala-lang.org.cn")

println(request.headers)
// prints: Vector(Accept-Encoding: gzip, deflate, Origin: https://scala-lang.org.cn)

如果请求包含主体,sttp 还可以自动添加“Content-Type”和“Content-Length”。

身份验证

如果您需要身份验证才能访问资源,可以使用 auth.basicauth.basicTokenauth.bearerauth.digest 方法之一。

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 = "***")

此页面的贡献者