scala
import akka.actor.ActorSystem
import akka.http.scaladsl.{Http, HttpExt}
import akka.http.scaladsl.model.{HttpRequest, HttpResponse}
import scala.concurrent.{ExecutionContextExecutor, Future}
import akka.http.scaladsl.model.StatusCodes
import akka.http.scaladsl.model.HttpMethods.GET
import scala.util.{Failure, Success}
implicit val system: ActorSystem = ActorSystem()
implicit val executionContext: ExecutionContextExecutor = system.dispatcher
val http: HttpExt = Http()
def sendRequest(url: String): Future[HttpResponse] = {
val request = HttpRequest(GET, url)
http.singleRequest(request)
}
val url = "https://api.example.com"
val responseFuture: Future[HttpResponse] = sendRequest(url)
responseFuture onComplete {
case Success(response) =>
if (response.status.isSuccess()) {
println(s"Request succeeded with status code ${response.status}")
} else {
println(s"Request failed with status code ${response.status}")
}
case Failure(ex) =>
ex match {
case _: java.net.ConnectException =>
println("Connection error")
case _: java.util.concurrent.TimeoutException =>
println("Request timed out")
case _ =>
println("Unknown network error")
}
}
scala
val http: HttpExt = Http()
def sendRequest(url: String): Future[HttpResponse] = {
val request = HttpRequest(GET, url)
http.singleRequest(request)
}
val url = "https://api.example.com"
val responseFuture: Future[HttpResponse] = sendRequest(url)
responseFuture onComplete {
case Success(response) =>
if (response.status.isSuccess()) {
println(s"Request succeeded with status code ${response.status}")
} else {
response.status match {
case status @ StatusCodes.ClientError(clientErrorCode) =>
println(s"Request failed with client error: $clientErrorCode")
case status @ StatusCodes.ServerError(serverErrorCode) =>
println(s"Request failed with server error: $serverErrorCode")
case _ =>
println("Unknown HTTP error response")
}
}
case Failure(ex) =>
println("Unknown error")
}