如何使用sttp客户端来发送http请求

373 阅读2分钟

简介

它是一个开源的库,为发送Http请求和处理返回的响应提供服务。

它保持了对请求和响应的适当的异常处理。所以现在我们讨论这个库的一些特性。

库的依赖性

为了使用sttp客户端的服务,在sbt项目的build.sbt中添加以下依赖项。

libraryDependencies += "com.softwaremill.sttp.client3" %% "core" % "3.3.18"

在我们的代码中导入给定的包以使用sttp客户端。

import sttp.client3._

实施

请求从后端发送,这是基于Scala和Java的HTTP客户端实现。

它们还与其他Scala堆栈集成,提供异步和同步计算,如Akka、zio、Htt4s等。

因为它提供了一个非常简单的机制来处理所有的请求和响应,因为它有预定义的请求和发送方法来实现。

例子

这是一个基本的sttp客户端例子,使用默认的jvm后端发送一个post请求。

  
  import sttp.client3._
  
  //valid Api url
  val url = uri"https://localhost:8000/person" 

  // Data to send in a post request
  val data = Map(
    "name" -> "John",
    "age" -> 25,
  )


  //default JVM backend
  val backend: SttpBackend[Identity, Any] = HttpURLConnectionBackend()

  //basic request to send using jvm backend
  val sttpRequest = basicRequest.body(data)
                    .post(url)
                    .send(backend)

  // response return in Either form.
   val sttpResponse  = sttpRequest.body match {
      case Right(response) = println(response)
      case Left(err) => println(s"Invalid request : $err")
    }
   
  

在这个例子中,有一个简单的Api,它被用于有2个键值对的地图数据的post请求。所以我们要配置basicRequest,它由sttp.client3包提供,用于安排简单的请求。

现在我们必须使用默认的jvm后台**HttpURLConnectionBackend()**来发送post请求数据,或者我们也可以使用其他可用的后台,如akka、zio、http4s等。

为了获得响应,我们要匹配request.body,其结果为两种形式(右为成功,左为失败)。

认证

我们也使用sttp来认证请求,通过使用bearer-token认证,digest认证。授权头被添加到请求中,通过添加适当的凭证。

基本认证

sttpRequest.auth.basic("username","password")

承载令牌认证

val accessToken = "C78bfb142b4a03ecfa49c7f3d0f6f59ef11d8435cb644533b050d33"
sttpRequest.auth.bearer(accessToken)

结论

在这篇文章中,我们学习了如何使用sttp客户端来发送http请求。它还有更多的功能,也提供了不同的基于http的项目的简单实现。