object RichHttpClient
A client robust to redirects and such. Copied and adapted from https://github.com/akka/akka-http/issues/195
Usage: call httpClientWithRedirect(). implicit val actorMaterializer = ActorMaterializer() implicit val executionContext = system.dispatcher private val simpleClient: HttpRequest => Future[HttpResponse] = Http(context.system).singleRequest(_: HttpRequest) private val redirectingClient: HttpRequest => Future[HttpResponse] = RichHttpClient.httpClientWithRedirect(simpleClient) RichHttpClient.httpResponseToString(redirectingClient(HttpRequest(uri = uri))).map(responseString => { log.debug(responseString) val archiveItem = jsonHelper.fromString[ItemInfo](responseString) archiveItem.toPodcast(filePattern = podcastRequest.filePattern, useArchiveOrder = podcastRequest.useArchiveOrder, podcast = podcastRequest.podcastTemplate) }) *
To dump to file: val httpResponseFuture = redirectingClient(HttpRequest(uri = dict.dictTarUrl)) * val destinationPath = Paths.get(dict.destinationFolder, dict.dictTarUrl.split("/").last) assert(new java.io.File(dict.destinationFolder).mkdirs()) val fileSink = FileIO.toPath(destinationPath) val ioResultFuture = httpResponseFuture.flatMap(response => { response.entity.dataBytes.runWith(fileSink) })
- Alphabetic
- By Inheritance
- RichHttpClient
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
- type HttpClient = (HttpRequest) ⇒ Future[HttpResponse]
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
httpClientWithRedirect(client: HttpClient)(implicit ec: ExecutionContext, materializer: Materializer): HttpClient
Turns a HttpClient into a Http client which handles redirects.
Turns a HttpClient into a Http client which handles redirects.
- returns
a recursive function of the type HttpClient
-
def
httpResponseToString(responseFuture: Future[HttpResponse])(implicit ec: ExecutionContext, materializer: Materializer): Future[String]
A convenience function to convert a Future[HttpResponse] to a Future[String].
A convenience function to convert a Future[HttpResponse] to a Future[String]. There are potentially better ways of doing this using the akka stream API.
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
redirectOrResult(client: HttpClient)(response: HttpResponse)(implicit materializer: Materializer): Future[HttpResponse]
Given a response, follow a redirect - or just yield the response.
Given a response, follow a redirect - or just yield the response.
- client
A function of the type HttpClient
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )