diff --git a/README.md b/README.md index bf0f158992..4e465194eb 100755 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ sttp (v2) documentation is available at [sttp.softwaremill.com/en/v2](https://st sttp (v1) documentation is available at [sttp.softwaremill.com/en/v1](https://sttp.softwaremill.com/en/v1). -scaladoc is available at [https://www.javadoc.io](https://www.javadoc.io/doc/com.softwaremill.sttp.client4/core_2.12/4.0.0-M9) +scaladoc is available at [https://www.javadoc.io](https://www.javadoc.io/doc/com.softwaremill.sttp.client4/core_2.12/4.0.0-M10) ## Quickstart with scala-cli @@ -56,7 +56,7 @@ Add the following directive to the top of your scala file to add the core sttp d If you are using [scala-cli](https://scala-cli.virtuslab.org), you can quickly start experimenting with sttp by copy-pasting the following: ``` -//> using lib "com.softwaremill.sttp.client4::core:4.0.0-M9" +//> using lib "com.softwaremill.sttp.client4::core:4.0.0-M10" import sttp.client4.quick._ quickRequest.get(uri"http://httpbin.org/ip").send() ``` @@ -68,7 +68,7 @@ The `quick` package import brings in the sttp API and a pre-configured, global s Similarly, using [Ammonite](http://ammonite.io): ```scala -import $ivy.`com.softwaremill.sttp.client4::core:4.0.0-M9` +import $ivy.`com.softwaremill.sttp.client4::core:4.0.0-M10` import sttp.client4.quick._ quickRequest.get(uri"http://httpbin.org/ip").send() ``` @@ -78,7 +78,7 @@ quickRequest.get(uri"http://httpbin.org/ip").send() Add the following dependency: ```scala -"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10" ``` Then, import: @@ -133,7 +133,7 @@ The documentation is typechecked using [mdoc](https://scalameta.org/mdoc/). The When generating documentation, it's best to set the version to the current one, so that the generated doc files don't include modifications with the current snapshot version. -That is, in sbt run: `set version := "4.0.0-M9"`, before running `mdoc` in `docs`. +That is, in sbt run: `set version := "4.0.0-M10"`, before running `mdoc` in `docs`. ### Testing the Scala.JS backend diff --git a/generated-docs/out/backends/akka.md b/generated-docs/out/backends/akka.md index f638b4372e..84f9a89b3b 100644 --- a/generated-docs/out/backends/akka.md +++ b/generated-docs/out/backends/akka.md @@ -3,7 +3,7 @@ This backend is based on [akka-http](http://doc.akka.io/docs/akka-http/current/scala/http/). To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "akka-http-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "akka-http-backend" % "4.0.0-M10" ``` A fully **asynchronous** backend. Uses the `Future` effect to return responses. There are also [other `Future`-based backends](future.md), which don't depend on Akka. diff --git a/generated-docs/out/backends/catseffect.md b/generated-docs/out/backends/catseffect.md index 5604609cc7..e9df74b668 100644 --- a/generated-docs/out/backends/catseffect.md +++ b/generated-docs/out/backends/catseffect.md @@ -14,7 +14,7 @@ Also note that the [http4s](http4s.md) backend can also be created for a type im Firstly, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "cats" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "cats" % "4.0.0-M10" ``` Obtain a cats-effect `Resource` which creates the backend, and closes the thread pool after the resource is no longer used: @@ -82,9 +82,9 @@ Creation of the backend can be done in two basic ways: Firstly, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "armeria-backend-cats" % "4.0.0-M9" // for cats-effect 3.x +"com.softwaremill.sttp.client4" %% "armeria-backend-cats" % "4.0.0-M10" // for cats-effect 3.x // or -"com.softwaremill.sttp.client4" %% "armeria-backend-cats-ce2" % "4.0.0-M9" // for cats-effect 2.x +"com.softwaremill.sttp.client4" %% "armeria-backend-cats-ce2" % "4.0.0-M10" // for cats-effect 2.x ``` create client: diff --git a/generated-docs/out/backends/finagle.md b/generated-docs/out/backends/finagle.md index ccfdf1def0..84c038106f 100644 --- a/generated-docs/out/backends/finagle.md +++ b/generated-docs/out/backends/finagle.md @@ -3,7 +3,7 @@ To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "finagle-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "finagle-backend" % "4.0.0-M10" ``` Next you'll need to add an implicit value: diff --git a/generated-docs/out/backends/fs2.md b/generated-docs/out/backends/fs2.md index f99e036c68..01fb57deed 100644 --- a/generated-docs/out/backends/fs2.md +++ b/generated-docs/out/backends/fs2.md @@ -12,9 +12,9 @@ Creation of the backend can be done in two basic ways: Firstly, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "fs2" % "4.0.0-M9" // for cats-effect 3.x & fs2 3.x +"com.softwaremill.sttp.client4" %% "fs2" % "4.0.0-M10" // for cats-effect 3.x & fs2 3.x // or -"com.softwaremill.sttp.client4" %% "fs2ce2" % "4.0.0-M9" // for cats-effect 2.x & fs2 2.x +"com.softwaremill.sttp.client4" %% "fs2ce2" % "4.0.0-M10" // for cats-effect 2.x & fs2 2.x ``` Obtain a cats-effect `Resource` which creates the backend, and closes the thread pool after the resource is no longer used: @@ -78,9 +78,9 @@ Host header override is supported in environments running Java 12 onwards, but i To use, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "armeria-backend-fs2" % "4.0.0-M9" // for cats-effect 3.x & fs2 3.x +"com.softwaremill.sttp.client4" %% "armeria-backend-fs2" % "4.0.0-M10" // for cats-effect 3.x & fs2 3.x // or -"com.softwaremill.sttp.client4" %% "armeria-backend-fs2" % "4.0.0-M9" // for cats-effect 2.x & fs2 2.x +"com.softwaremill.sttp.client4" %% "armeria-backend-fs2" % "4.0.0-M10" // for cats-effect 2.x & fs2 2.x ``` create client: @@ -147,6 +147,7 @@ val effect = HttpClientFs2Backend.resource[IO]().use { backend => .streamBody(Fs2Streams[IO])(stream) .send(backend) } +// run the effect ``` Responses can also be streamed: @@ -169,6 +170,7 @@ val effect = HttpClientFs2Backend.resource[IO]().use { backend => response } +// run the effect ``` ## Websockets diff --git a/generated-docs/out/backends/future.md b/generated-docs/out/backends/future.md index 342f67df75..4bae4b5a69 100644 --- a/generated-docs/out/backends/future.md +++ b/generated-docs/out/backends/future.md @@ -20,7 +20,7 @@ Class Supported stream type To use, you don't need any extra dependencies, `core` is enough: ``` -"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10" ``` You'll need the following imports: @@ -41,7 +41,7 @@ or, if you'd like to instantiate the HttpClient yourself: ```scala import java.net.http.HttpClient -val client: HttpClient = ??? +val client: HttpClient = ??? val backend = HttpClientFutureBackend.usingClient(client) ``` @@ -59,7 +59,7 @@ Host header override is supported in environments running Java 12 onwards, but i To use, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "okhttp-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "okhttp-backend" % "4.0.0-M10" ``` and some imports: @@ -80,7 +80,7 @@ or, if you'd like to instantiate the OkHttpClient yourself: ```scala import okhttp3.OkHttpClient -val okHttpClient: OkHttpClient = ??? +val okHttpClient: OkHttpClient = ??? val backend = OkHttpFutureBackend.usingClient(okHttpClient) ``` @@ -91,7 +91,7 @@ This backend depends on [OkHttp](http://square.github.io/okhttp/) and fully supp To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "armeria-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "armeria-backend" % "4.0.0-M10" ``` add imports: diff --git a/generated-docs/out/backends/http4s.md b/generated-docs/out/backends/http4s.md index b5e2dd1edc..9f89dab9dc 100644 --- a/generated-docs/out/backends/http4s.md +++ b/generated-docs/out/backends/http4s.md @@ -3,9 +3,9 @@ This backend is based on [http4s](https://http4s.org) (client) and is **asynchronous**. To use, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "http4s-backend" % "4.0.0-M9" // for cats-effect 3.x & http4s 1.0.0-Mx +"com.softwaremill.sttp.client4" %% "http4s-backend" % "4.0.0-M10" // for cats-effect 3.x & http4s 1.0.0-Mx // or -"com.softwaremill.sttp.client4" %% "http4s-ce2-backend" % "4.0.0-M9" // for cats-effect 2.x & http4s 0.21.x +"com.softwaremill.sttp.client4" %% "http4s-ce2-backend" % "4.0.0-M10" // for cats-effect 2.x & http4s 0.21.x ``` The backend can be created in a couple of ways, e.g.: diff --git a/generated-docs/out/backends/javascript/fetch.md b/generated-docs/out/backends/javascript/fetch.md index d207e4ec92..5034a4ae5a 100644 --- a/generated-docs/out/backends/javascript/fetch.md +++ b/generated-docs/out/backends/javascript/fetch.md @@ -7,7 +7,7 @@ A JavaScript backend with web socket support. Implemented using the [Fetch API]( This is the default backend, available in the main jar for JS. To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %%% "core" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "core" % "4.0.0-M10" ``` And create the backend instance: @@ -26,7 +26,7 @@ Note that `Fetch` does not pass cookies by default. If your request needs cookie To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %%% "monix" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "monix" % "4.0.0-M10" ``` And create the backend instance: @@ -40,7 +40,7 @@ val backend = FetchMonixBackend() To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %%% "zio" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "zio" % "4.0.0-M10" ``` And create the backend instance: @@ -55,13 +55,13 @@ Any effect implementing the cats-effect `Concurrent` typeclass can be used. To u your project: ``` -"com.softwaremill.sttp.client4" %%% "cats" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "cats" % "4.0.0-M10" ``` If you are on Cats Effect 2 (CE2) you will need to add the CE2 specific dependency instead: ``` -"com.softwaremill.sttp.client4" %%% "catsce2 % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "catsce2 % "4.0.0-M10" ``` And create the backend instance: @@ -129,7 +129,7 @@ Streaming support is provided via `FetchMonixBackend`. Note that streaming suppo To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %%% "monix" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "monix" % "4.0.0-M10" ``` An example of streaming a response: diff --git a/generated-docs/out/backends/monix.md b/generated-docs/out/backends/monix.md index 30a69767ac..ba553c3bc0 100644 --- a/generated-docs/out/backends/monix.md +++ b/generated-docs/out/backends/monix.md @@ -12,7 +12,7 @@ Creation of the backend can be done in two basic ways: Firstly, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M10" ``` and create the backend using: @@ -50,7 +50,7 @@ Host header override is supported in environments running Java 12 onwards, but i To use, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "okhttp-backend-monix" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "okhttp-backend-monix" % "4.0.0-M10" ``` Create the backend using: @@ -76,7 +76,7 @@ This backend depends on [OkHttp](http://square.github.io/okhttp/) and fully supp To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "armeria-backend-monix" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "armeria-backend-monix" % "4.0.0-M10" ``` add imports: diff --git a/generated-docs/out/backends/native/curl.md b/generated-docs/out/backends/native/curl.md index 2e658fea91..cbb314a057 100644 --- a/generated-docs/out/backends/native/curl.md +++ b/generated-docs/out/backends/native/curl.md @@ -5,7 +5,7 @@ A Scala Native backend implemented using [Curl](https://github.com/curl/curl/blo To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %%% "core" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "core" % "4.0.0-M10" ``` and initialize one of the backends: diff --git a/generated-docs/out/backends/pekko.md b/generated-docs/out/backends/pekko.md index ba5d5b795d..78b8311cc0 100644 --- a/generated-docs/out/backends/pekko.md +++ b/generated-docs/out/backends/pekko.md @@ -3,7 +3,7 @@ This backend is based on [pekko-http](https://pekko.apache.org/docs/pekko-http/current/). To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "pekko-http-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "pekko-http-backend" % "4.0.0-M10" ``` A fully **asynchronous** backend. Uses the `Future` effect to return responses. There are also [other `Future`-based backends](future.md), which don't depend on Pekko. diff --git a/generated-docs/out/backends/scalaz.md b/generated-docs/out/backends/scalaz.md index 29ad261051..98e61ad6ae 100644 --- a/generated-docs/out/backends/scalaz.md +++ b/generated-docs/out/backends/scalaz.md @@ -8,7 +8,7 @@ The [Scalaz](https://github.com/scalaz/scalaz) backend is **asynchronous**. Send To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "armeria-backend-scalaz" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "armeria-backend-scalaz" % "4.0.0-M10" ``` add imports: diff --git a/generated-docs/out/backends/synchronous.md b/generated-docs/out/backends/synchronous.md index 6d5f8d745d..70b07d22c4 100644 --- a/generated-docs/out/backends/synchronous.md +++ b/generated-docs/out/backends/synchronous.md @@ -7,7 +7,7 @@ There are several synchronous backend implementations. Sending a request using t The default **synchronous** backend. To use, you don't need any extra dependencies, `core` is enough: ``` -"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10" ``` Create the backend using: @@ -40,7 +40,7 @@ Host header override is supported in environments running Java 12 onwards, but i To use, you don't need any extra dependencies, `core` is enough: ``` -"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10" ``` Create the backend using: @@ -62,7 +62,7 @@ This backend supports host header override, but it has to be enabled by system p To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "okhttp-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "okhttp-backend" % "4.0.0-M10" ``` Create the backend using: diff --git a/generated-docs/out/backends/wrappers/custom.md b/generated-docs/out/backends/wrappers/custom.md index e16c53f336..2e269effa0 100644 --- a/generated-docs/out/backends/wrappers/custom.md +++ b/generated-docs/out/backends/wrappers/custom.md @@ -260,7 +260,7 @@ object RateLimitingSttpBackend { Implementing a new backend is made easy as the tests are published in the `core` jar file under the `tests` classifier. Simply add the follow dependencies to your `build.sbt`: ``` -"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9" % Test classifier "tests" +"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10" % Test classifier "tests" ``` Implement your backend and extend the `HttpTest` class: @@ -290,9 +290,9 @@ import sttp.client4.impl.cats.implicits._ from the cats integration module. The module should be available on the classpath after adding following dependency: ```scala -"com.softwaremill.sttp.client4" %% "cats" % "4.0.0-M9" // for cats-effect 3.x +"com.softwaremill.sttp.client4" %% "cats" % "4.0.0-M10" // for cats-effect 3.x // or -"com.softwaremill.sttp.client4" %% "catsce2" % "4.0.0-M9" // for cats-effect 2.x +"com.softwaremill.sttp.client4" %% "catsce2" % "4.0.0-M10" // for cats-effect 2.x ``` The object contains implicits to convert a cats `MonadError` into the sttp `MonadError`, diff --git a/generated-docs/out/backends/wrappers/logging.md b/generated-docs/out/backends/wrappers/logging.md index ff5ecd6b3e..d4b5898991 100644 --- a/generated-docs/out/backends/wrappers/logging.md +++ b/generated-docs/out/backends/wrappers/logging.md @@ -28,7 +28,7 @@ Log levels can be configured when creating the `LoggingBackend`, or specified in To use the [slf4j](http://www.slf4j.org) logging backend wrapper, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "slf4j-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "slf4j-backend" % "4.0.0-M10" ``` There are three backend wrappers available, which log request & response information using a slf4j `Logger`. To see the logs, you'll need to use an slf4j-compatible logger implementation, e.g. [logback](http://logback.qos.ch), or use a binding, e.g. [log4j-slf4j](https://logging.apache.org/log4j/2.0/log4j-slf4j-impl/index.html). @@ -41,6 +41,9 @@ import sttp.client4.logging.slf4j.Slf4jLoggingBackend val backend = Slf4jLoggingBackend(DefaultSyncBackend()) basicRequest.get(uri"https://httpbin.org/get").send(backend) + +// Logs: +// 21:14:23.735 [main] INFO sttp.client4.logging.slf4j.Slf4jTimingBackend - Request: GET https://httpbin.org/get, took: 0.795s, response: 200 ``` To create a customised logging backend, see the section on [custom backends](custom.md). @@ -50,5 +53,5 @@ To create a customised logging backend, see the section on [custom backends](cus To use the [scribe](https://github.com/outr/scribe) logging backend wrapper, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "scribe-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "scribe-backend" % "4.0.0-M10" ``` \ No newline at end of file diff --git a/generated-docs/out/backends/wrappers/opentelemetry.md b/generated-docs/out/backends/wrappers/opentelemetry.md index 3d95993d94..0af49d279a 100644 --- a/generated-docs/out/backends/wrappers/opentelemetry.md +++ b/generated-docs/out/backends/wrappers/opentelemetry.md @@ -12,7 +12,7 @@ The backend depends only on [opentelemetry-api](https://github.com/open-telemetr following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "opentelemetry-metrics-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "opentelemetry-metrics-backend" % "4.0.0-M10" ``` Then an instance can be obtained as follows: @@ -55,7 +55,7 @@ OpenTelemetryMetricsBackend( To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "opentelemetry-tracing-zio-backend" % "4.0.0-M9" // for ZIO 2.x +"com.softwaremill.sttp.client4" %% "opentelemetry-tracing-zio-backend" % "4.0.0-M10" // for ZIO 2.x ``` This backend depends on [zio-opentelemetry](https://github.com/zio/zio-telemetry). diff --git a/generated-docs/out/backends/wrappers/prometheus.md b/generated-docs/out/backends/wrappers/prometheus.md index 419d8cedb2..71c56512b2 100644 --- a/generated-docs/out/backends/wrappers/prometheus.md +++ b/generated-docs/out/backends/wrappers/prometheus.md @@ -3,7 +3,7 @@ To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "prometheus-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "prometheus-backend" % "4.0.0-M10" ``` and some imports: diff --git a/generated-docs/out/backends/zio.md b/generated-docs/out/backends/zio.md index d37538a6b0..68be7f0880 100644 --- a/generated-docs/out/backends/zio.md +++ b/generated-docs/out/backends/zio.md @@ -9,8 +9,8 @@ The `*-zio` modules depend on ZIO 2.x. For ZIO 1.x support, use modules with the To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M9" // for ZIO 2.x -"com.softwaremill.sttp.client4" %% "zio1" % "4.0.0-M9" // for ZIO 1.x +"com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M10" // for ZIO 2.x +"com.softwaremill.sttp.client4" %% "zio1" % "4.0.0-M10" // for ZIO 1.x ``` Create the backend using: @@ -45,8 +45,8 @@ Host header override is supported in environments running Java 12 onwards, but i To use, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "armeria-backend-zio" % "4.0.0-M9" // for ZIO 2.x -"com.softwaremill.sttp.client4" %% "armeria-backend-zio1" % "4.0.0-M9" // for ZIO 1.x +"com.softwaremill.sttp.client4" %% "armeria-backend-zio" % "4.0.0-M10" // for ZIO 2.x +"com.softwaremill.sttp.client4" %% "armeria-backend-zio1" % "4.0.0-M10" // for ZIO 1.x ``` add imports: diff --git a/generated-docs/out/conf/proxy.md b/generated-docs/out/conf/proxy.md index 2f900b9fd9..961c2d5a72 100644 --- a/generated-docs/out/conf/proxy.md +++ b/generated-docs/out/conf/proxy.md @@ -31,6 +31,16 @@ import sttp.client4._ BackendOptions.httpProxy("some.host", 8080, "username", "password") ``` +if you use a HttpClient-based backend (e.g. `HttpClientBackend`) and your proxy server requires Basic authentication, you will need to enable it by +removing Basic from the `jdk.http.auth.tunneling.disabledSchemes` networking property, or by setting a system property of the same name to "". + +```scala +System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "") +``` + +Please be aware that enabling Basic authentication for HTTP tunneling can expose your credentials to interception, so it +should only be done if you understand the risks and your network is secure. This behaviour is described in https://www.oracle.com/java/technologies/javase/8u111-relnotes.html. + ## Ignoring and allowing specific hosts There are two additional settings that can be provided to via `BackendOptions`: diff --git a/generated-docs/out/conf/ssl.md b/generated-docs/out/conf/ssl.md index dfbef53dce..fd801a026f 100644 --- a/generated-docs/out/conf/ssl.md +++ b/generated-docs/out/conf/ssl.md @@ -50,7 +50,7 @@ Next, based on [one way SSL example](#one-way-ssl), add `TrustManagerFactory` to ```scala ks.load(new FileInputStream("/path/to/server_trust"), "password".toCharArray) -val tmf: TrustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm) +val tmf: TrustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm) tmf.init(ks) val ssl: SSLContext = SSLContext.getInstance("TLS") diff --git a/generated-docs/out/examples.md b/generated-docs/out/examples.md index edceb1a584..082ef7e870 100644 --- a/generated-docs/out/examples.md +++ b/generated-docs/out/examples.md @@ -7,7 +7,7 @@ All of the examples are available [in the sources](https://github.com/softwaremi Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10") ``` Example code: @@ -22,7 +22,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10") ``` Example code: @@ -38,8 +38,8 @@ Required dependencies: ```scala libraryDependencies ++= List( - "com.softwaremill.sttp.client4" %% "akka-http-backend" % "4.0.0-M9", - "com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M9", + "com.softwaremill.sttp.client4" %% "akka-http-backend" % "4.0.0-M10", + "com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M10", "org.json4s" %% "json4s-native" % "3.6.0" ) ``` @@ -57,8 +57,8 @@ Required dependencies: ```scala libraryDependencies ++= List( - "com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M9", - "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M9", + "com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M10", + "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M10", "io.circe" %% "circe-generic" % "0.14.6" ) ``` @@ -76,8 +76,8 @@ Required dependencies: ```scala libraryDependencies ++= List( - "com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M9", - "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M9", + "com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M10", + "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M10", "io.circe" %% "circe-generic" % "0.14.6" ) ``` @@ -95,8 +95,8 @@ Required dependencies: ```scala libraryDependencies ++= List( - "com.softwaremill.sttp.client4" %% "slf4j-backend" % "4.0.0-M9", - "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M9", + "com.softwaremill.sttp.client4" %% "slf4j-backend" % "4.0.0-M10", + "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M10", "io.circe" %% "circe-generic" % "0.14.6" ) ``` @@ -114,8 +114,8 @@ Required dependencies: ```scala libraryDependencies ++= List( - "com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M9", - "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M9", + "com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M10", + "com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M10", "io.circe" %% "circe-generic" % "0.14.6" ) ``` @@ -132,7 +132,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10") ``` Example code: @@ -146,7 +146,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M10") ``` Example code: @@ -161,7 +161,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "fs2" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "fs2" % "4.0.0-M10") ``` Example code: @@ -176,7 +176,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M10") ``` Example code: @@ -191,7 +191,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "akka-http-backend" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "akka-http-backend" % "4.0.0-M10") ``` Example code: @@ -206,7 +206,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "pekko-http-backend" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "pekko-http-backend" % "4.0.0-M10") ``` Example code: @@ -221,7 +221,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "monix" % "4.0.0-M10") ``` Example code: @@ -236,7 +236,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "fs2" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "fs2" % "4.0.0-M10") ``` Example code: @@ -251,7 +251,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M10") ``` Example code: @@ -266,7 +266,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "zio" % "4.0.0-M10") ``` Example code: @@ -281,7 +281,7 @@ Example code: Required dependencies: ```scala -libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9") +libraryDependencies ++= List("com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10") ``` Example code: diff --git a/generated-docs/out/index.md b/generated-docs/out/index.md index f26a180366..8df445cdc9 100644 --- a/generated-docs/out/index.md +++ b/generated-docs/out/index.md @@ -33,7 +33,7 @@ println(response.header("Content-Length")) println(response.body) ``` -For more examples, see the [usage examples](examples.md) section. To start using sttp client in your project, see the [quickstart](quickstart.md). Or, browse the documentation to find the topics that interest you the most! +For more examples, see the [usage examples](examples.md) section. To start using sttp client in your project, see the [quickstart](quickstart.md). Or, browse the documentation to find the topics that interest you the most! ScalaDoc is available at [https://www.javadoc.io](https://www.javadoc.io/doc/com.softwaremill.sttp.client4/core_2.12/4.0.0-M9). ## Other sttp projects @@ -56,7 +56,7 @@ Third party projects: ## Sponsors -Development and maintenance of sttp client is sponsored by [SoftwareMill](https://softwaremill.com), a software development and consulting company. We help clients scale their business through software. Our areas of expertise include backends, distributed systems, blockchain, machine learning and data analytics. +Development and maintenance of sttp client is sponsored by [SoftwareMill](https://softwaremill.com), a software development and consulting company. We help clients scale their business through software. Our areas of expertise include backends, distributed systems, machine learning, platform engineering and data analytics. [![](https://files.softwaremill.com/logo/logo.png "SoftwareMill")](https://softwaremill.com) diff --git a/generated-docs/out/json.md b/generated-docs/out/json.md index 9eedb4a3c3..952ab632b5 100644 --- a/generated-docs/out/json.md +++ b/generated-docs/out/json.md @@ -34,7 +34,7 @@ case class ResponsePayload(data: String) JSON encoding of bodies and decoding of responses can be handled using [Circe](https://circe.github.io/circe/) by the `circe` module. To use add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "circe" % "4.0.0-M10" ``` This module adds a body serialized, so that json payloads can be sent as request bodies. To send a payload of type `T` as json, a `io.circe.Encoder[T]` implicit value must be available in scope. @@ -66,7 +66,7 @@ Arbitrary JSON structures can be traversed by parsing the result as `io.circe.Js To encode and decode json using json4s, add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M10" "org.json4s" %% "json4s-native" % "3.6.0" ``` @@ -100,7 +100,7 @@ val response: Response[Either[ResponseException[String, Exception], ResponsePayl To encode and decode JSON using [spray-json](https://github.com/spray/spray-json), add the following dependency to your project: ``` -"com.softwaremill.sttp.client4" %% "spray-json" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "spray-json" % "4.0.0-M10" ``` Using this module it is possible to set request bodies and read response bodies as your custom types, using the implicitly available instances of `spray.json.JsonWriter` / `spray.json.JsonReader` or `spray.json.JsonFormat`. @@ -132,13 +132,13 @@ val response: Response[Either[ResponseException[String, Exception], ResponsePayl To encode and decode JSON using [play-json](https://www.playframework.com), add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "play-json" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "play-json" % "4.0.0-M10" ``` If you use older version of play (2.9.x), add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "play29-json" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "play29-json" % "4.0.0-M10" ``` To use, add an import: `import sttp.client4.playJson._`. @@ -150,13 +150,13 @@ To encode and decode JSON using the high-performance [zio-json](https://zio.gith The `zio-json` module depends on ZIO 2.x. For ZIO 1.x support, use `zio1-json`. ```scala -"com.softwaremill.sttp.client4" %% "zio-json" % "4.0.0-M9" // for ZIO 2.x -"com.softwaremill.sttp.client4" %% "zio1-json" % "4.0.0-M9" // for ZIO 1.x +"com.softwaremill.sttp.client4" %% "zio-json" % "4.0.0-M10" // for ZIO 2.x +"com.softwaremill.sttp.client4" %% "zio1-json" % "4.0.0-M10" // for ZIO 1.x ``` or for ScalaJS (cross build) projects: ```scala -"com.softwaremill.sttp.client4" %%% "zio-json" % "4.0.0-M9" // for ZIO 2.x -"com.softwaremill.sttp.client4" %%% "zio1-json" % "4.0.0-M9" // for ZIO 1.x +"com.softwaremill.sttp.client4" %%% "zio-json" % "4.0.0-M10" // for ZIO 2.x +"com.softwaremill.sttp.client4" %%% "zio1-json" % "4.0.0-M10" // for ZIO 1.x ``` To use, add an import: `import sttp.client4.ziojson._` (or extend `SttpZioJsonApi`), define an implicit `JsonCodec`, or `JsonDecoder`/`JsonEncoder` for your datatype. @@ -188,13 +188,13 @@ basicRequest To encode and decode JSON using the [high(est)-performant](https://plokhotnyuk.github.io/jsoniter-scala/) [jsoniter-scala](https://github.com/plokhotnyuk/jsoniter-scala) library, one add the following dependency to your project. ```scala -"com.softwaremill.sttp.client4" %% "jsoniter" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "jsoniter" % "4.0.0-M10" ``` or for ScalaJS (cross build) projects: ```scala -"com.softwaremill.sttp.client4" %%% "jsoniter" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "jsoniter" % "4.0.0-M10" ``` To use, add an import: `import sttp.client4.jsoniter._` (or extend `SttpJsonIterJsonApi`), define an implicit `JsonCodec`, or `JsonDecoder`/`JsonEncoder` for your datatype. @@ -228,13 +228,13 @@ basicRequest To encode and decode JSON using the [uPickle](https://github.com/com-lihaoyi/upickle) library, add the following dependency to your project: ```scala -"com.softwaremill.sttp.client4" %% "upickle" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "upickle" % "4.0.0-M10" ``` or for ScalaJS (cross build) projects: ```scala -"com.softwaremill.sttp.client4" %%% "upickle" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %%% "upickle" % "4.0.0-M10" ``` To use, add an import: `import sttp.client4.upicklejson.default._` and define an implicit `ReadWriter` (or separately `Reader` and `Writer`) for your datatype. @@ -267,10 +267,12 @@ That's needed as the `upickle.Api` contains the `read`/`write` methods to serial For example, if you want to use the `legacy` upickle configuration, the integration might look as follows: ```scala -import upickle.legacy._ // get access to ReadWriter type, macroRW derivation, etc. // get access to ReadWriter type, macroRW derivation, etc. +import upickle.legacy._ // get access to ReadWriter type, macroRW derivation, etc. object legacyUpickle extends sttp.client4.upicklejson.SttpUpickleApi { override val upickleApi: upickle.legacy.type = upickle.legacy } import legacyUpickle._ + +// use upickle as in the above examples ``` \ No newline at end of file diff --git a/generated-docs/out/openapi.md b/generated-docs/out/openapi.md index 5f0923ed57..a9f0313fed 100644 --- a/generated-docs/out/openapi.md +++ b/generated-docs/out/openapi.md @@ -45,8 +45,8 @@ lazy val petstoreApi: Project = project openApiGeneratorName := "scala-sttp", openApiOutputDir := baseDirectory.value.name, libraryDependencies ++= Seq( - "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9", - "com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M9", + "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10", + "com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M10", "org.json4s" %% "json4s-jackson" % "3.6.8" ) ) @@ -96,8 +96,8 @@ lazy val petstoreApi: Project = project openApiOutputDir := baseDirectory.value.name, openApiIgnoreFileOverride := s"${baseDirectory.in(ThisBuild).value.getPath}/openapi-ignore-file", libraryDependencies ++= Seq( - "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9", - "com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M9", + "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10", + "com.softwaremill.sttp.client4" %% "json4s" % "4.0.0-M10", "org.json4s" %% "json4s-jackson" % "3.6.8" ), (compile in Compile) := ((compile in Compile) dependsOn openApiGenerate).value, diff --git a/generated-docs/out/quickstart.md b/generated-docs/out/quickstart.md index dd0f0bed6d..d55f3bed2f 100644 --- a/generated-docs/out/quickstart.md +++ b/generated-docs/out/quickstart.md @@ -15,7 +15,7 @@ platforms, and that each has its own dedicated set of backends. The basic dependency which provides the API, together with a synchronous and `Future`-based backends, is: ```scala -"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "core" % "4.0.0-M10" ``` ## Using scala-cli @@ -23,7 +23,7 @@ The basic dependency which provides the API, together with a synchronous and `Fu Add the following directive to the top of your scala file to add the core sttp dependency: ``` -//> using lib "com.softwaremill.sttp.client4::core:4.0.0-M9" +//> using lib "com.softwaremill.sttp.client4::core:4.0.0-M10" ``` ## Using Ammonite @@ -31,7 +31,7 @@ Add the following directive to the top of your scala file to add the core sttp d If you are an [Ammonite](https://ammonite.io) user, you can quickly start experimenting with sttp by copy-pasting the following: ```scala -import $ivy.`com.softwaremill.sttp.client4::core:4.0.0-M9` +import $ivy.`com.softwaremill.sttp.client4::core:4.0.0-M10` ``` ## Imports @@ -72,7 +72,7 @@ As an example, to integrate with the [uPickle](https://github.com/com-lihaoyi/up dependency: ```scala -"com.softwaremill.sttp.client4" %% "upickle" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "upickle" % "4.0.0-M10" ``` Your code might then look as follows: @@ -109,7 +109,7 @@ Logging can be added using the [logging backend wrapper](backends/wrappers/loggi use slf4j, you'll need the following dependency: ``` -"com.softwaremill.sttp.client4" %% "slf4j-backend" % "4.0.0-M9" +"com.softwaremill.sttp.client4" %% "slf4j-backend" % "4.0.0-M10" ``` Then, you'll need to configure your client: diff --git a/generated-docs/out/testing.md b/generated-docs/out/testing.md index 00af7b2ea9..367e8db137 100644 --- a/generated-docs/out/testing.md +++ b/generated-docs/out/testing.md @@ -44,6 +44,7 @@ val response1 = basicRequest.get(uri"http://example.org/a/b/c").send(testingBack // response1.body will be Right("Hello there") val response2 = basicRequest.post(uri"http://example.org/d/e").send(testingBackend) +// response2.code will be 500 ``` It is also possible to match requests by partial function, returning a response. E.g.: @@ -64,6 +65,7 @@ val response1 = basicRequest.get(uri"http://example.org/partial10").send(testing // response1.body will be Right(10) val response2 = basicRequest.post(uri"http://example.org/partialAda").send(testingBackend) +// response2.body will be Right("Ada") ``` ```eval_rst @@ -83,6 +85,7 @@ val testingBackend = BackendStub.asynchronousFuture }) val responseFuture = basicRequest.get(uri"http://example.org").send(testingBackend) +// responseFuture will complete after 5 seconds with "OK" response ``` The returned response may also depend on the request: @@ -95,6 +98,7 @@ val testingBackend = SyncBackendStub ) val response = basicRequest.get(uri"http://example.org").send(testingBackend) +// response.body will be Right("OK, got request sent to example.org") ``` You can define consecutive raw responses that will be served: @@ -104,9 +108,9 @@ val testingBackend: SyncBackendStub = SyncBackendStub .whenAnyRequest .thenRespondCyclic("first", "second", "third") -basicRequest.get(uri"http://example.org").send(testingBackend) // Right("OK, first") // Right("OK, first") -basicRequest.get(uri"http://example.org").send(testingBackend) // Right("OK, second") // Right("OK, second") -basicRequest.get(uri"http://example.org").send(testingBackend) // Right("OK, third") // Right("OK, third") +basicRequest.get(uri"http://example.org").send(testingBackend) // Right("OK, first") +basicRequest.get(uri"http://example.org").send(testingBackend) // Right("OK, second") +basicRequest.get(uri"http://example.org").send(testingBackend) // Right("OK, third") basicRequest.get(uri"http://example.org").send(testingBackend) // Right("OK, first") ``` @@ -120,8 +124,8 @@ val testingBackend: SyncBackendStub = SyncBackendStub Response("error", StatusCode.InternalServerError, "Something went wrong") ) -basicRequest.get(uri"http://example.org").send(testingBackend) // code will be 200 // code will be 200 -basicRequest.get(uri"http://example.org").send(testingBackend) // code will be 500 // code will be 500 +basicRequest.get(uri"http://example.org").send(testingBackend) // code will be 200 +basicRequest.get(uri"http://example.org").send(testingBackend) // code will be 500 basicRequest.get(uri"http://example.org").send(testingBackend) // code will be 200 ``` @@ -234,6 +238,7 @@ val response1 = basicRequest.get(uri"http://api.internal/a").send(testingBackend // response1.body will be Right("I'm a STUB") val response2 = basicRequest.post(uri"http://api.internal/b").send(testingBackend) +// response2 will be whatever a "real" network call to api.internal/b returns ``` ## Testing streams @@ -302,4 +307,5 @@ val response1 = basicRequest.get(uri"http://example.org/a/b/c").send(testingBack // response1.body will be Right("Hello there") testingBackend.allInteractions: List[(GenericRequest[_, _], Try[Response[_]])] +// the list will contain one element and can be verified in a test ```